Add example for creating apex policy in Tosca format 75/96475/2
authora.sreekumar <ajith.sreekumar@est.tech>
Tue, 1 Oct 2019 14:32:25 +0000 (15:32 +0100)
committera.sreekumar <ajith.sreekumar@est.tech>
Wed, 2 Oct 2019 10:01:34 +0000 (11:01 +0100)
Change-Id: I30e7d162a2aecdfe5c51e920b48d659130ae74e4
Issue-ID: POLICY-2127
Signed-off-by: a.sreekumar <ajith.sreekumar@est.tech>
examples/examples-onap-vcpe/pom.xml
examples/examples-onap-vcpe/src/main/resources/tosca/ToscaPolicyType.json [new file with mode: 0644]
examples/examples-onap-vcpe/src/main/resources/tosca/ToscaTemplate.json [new file with mode: 0644]

index 89d688d..fd59094 100644 (file)
@@ -33,6 +33,7 @@
 
     <properties>
         <policymodel.name>ONAPvCPEPolicyModel</policymodel.name>
+        <toscapolicy.name>ONAPvCPEToscaPolicy</toscapolicy.name>
         <apex-domains-onap-vcpe-dir>${project.basedir}/src</apex-domains-onap-vcpe-dir>
     </properties>
 
                     </execution>
                 </executions>
             </plugin>
+            <!-- Generate the APEX ToscaPolicy JSON file-->
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-tosca-policy</id>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>java</goal>
+                        </goals>
+                        <configuration>
+                            <mainClass>org.onap.policy.apex.auth.clieditor.tosca.ApexCliToscaEditorMain</mainClass>
+                            <classpathScope>compile</classpathScope>
+                            <arguments>
+                                <argument>--command-file=${project.basedir}/src/main/resources/policy/${policymodel.name}.apex</argument>
+                                <argument>--output-tosca-file=${project.build.directory}/classes/${toscapolicy.name}.json</argument>
+                                <argument>--log-file=${project.build.directory}/${policymodel.name}_policygeneration.log</argument>
+                                <argument>--apex-config-file=${project.basedir}/src/main/resources/examples/config/ONAPvCPE/ApexConfig.json</argument>
+                                <argument>--tosca-template-file=${project.basedir}/src/main/resources/tosca/ToscaTemplate.json</argument>
+                            </arguments>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
     </build>
 
diff --git a/examples/examples-onap-vcpe/src/main/resources/tosca/ToscaPolicyType.json b/examples/examples-onap-vcpe/src/main/resources/tosca/ToscaPolicyType.json
new file mode 100644 (file)
index 0000000..810d970
--- /dev/null
@@ -0,0 +1,266 @@
+{
+  "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+  "policy_types": {
+    "onap.policies.controlloop.operational.Apex": {
+      "version": "1.0.0",
+      "description": "Operational Policy for Control Loops using the APEX PDP",
+      "properties": {
+        "engine_service": {
+          "type": "onap.datatypes.policies.controlloop.operational.apex.EngineService",
+          "description": "APEX Engine Service Parameters"
+        },
+        "inputs": {
+          "type": "map",
+          "description": "Inputs for handling events coming into the APEX engine",
+          "entry_schema": {
+            "type": "onap.datatypes.policies.controlloop.operational.apex.EventHandler"
+          }
+        },
+        "outputs": {
+          "type": "map",
+          "description": "Outputs for handling events going out of the APEX engine",
+          "entry_schema": {
+            "type": "onap.datatypes.policies.controlloop.operational.apex.EventHandler"
+          }
+        },
+        "environment": {
+          "type": "list",
+          "description": "Envioronmental parameters for the APEX engine",
+          "entry_schema": {
+            "type": "onap.datatypes.policies.controlloop.operational.apex.Environment"
+          }
+        }
+      }
+    }
+  },
+  "data_types": {
+    "onap.datatypes.policies.controlloop.operational.apex.EngineService": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "name": {
+          "type": "string",
+          "description": "Specifies the engine name",
+          "required": false,
+          "default": "ApexEngineService"
+        },
+        "version": {
+          "type": "string",
+          "description": "Specifies the engine version in double dotted format",
+          "required": false,
+          "default": "1.0.0"
+        },
+        "id": {
+          "type": "int",
+          "description": "Specifies the engine id",
+          "required": true
+        },
+        "instance_count": {
+          "type": "int",
+          "description": "Specifies the number of engine threads that should be run",
+          "required": true
+        },
+        "deployment_port": {
+          "type": "int",
+          "description": "Specifies the port to connect to for engine administration",
+          "required": false,
+          "default": 1
+        },
+        "policy_model_file_name": {
+          "type": "string",
+          "description": "The name of the file from which to read the APEX policy model",
+          "required": false,
+          "default": ""
+        },
+        "policy_type_impl": {
+          "type": "string",
+          "description": "The policy type implementation from which to read the APEX policy model",
+          "required": false,
+          "default": ""
+        },
+        "periodic_event_period": {
+          "type": "string",
+          "description": "The time interval in milliseconds for the periodic scanning event, 0 means \"don't scan\"",
+          "required": false,
+          "default": 0
+        },
+        "engine": {
+          "type": "onap.datatypes.policies.controlloop.operational.apex.engineservice.Engine",
+          "description": "The parameters for all engines in the APEX engine service",
+          "required": true
+        }
+      }
+    },
+    "onap.datatypes.policies.controlloop.operational.apex.EventHandler": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "name": {
+          "type": "string",
+          "description": "Specifies the event handler name, if not specified this is set to the key name",
+          "required": false
+        },
+        "carrier_technology": {
+          "type": "onap.datatypes.policies.controlloop.operational.apex.CarrierTechnology",
+          "description": "Specifies the carrier technology of the event handler (such as REST/Web Socket/Kafka)",
+          "required": true
+        },
+        "event_protocol": {
+          "type": "onap.datatypes.policies.controlloop.operational.apex.EventProtocol",
+          "description": "Specifies the event protocol of events for the event handler (such as Yaml/JSON/XML/POJO)",
+          "required": true
+        },
+        "event_name": {
+          "type": "string",
+          "description": "Specifies the event name for events on this event handler, if not specified, the event name is read from or written to the event being received or sent",
+          "required": false
+        },
+        "event_name_filter": {
+          "type": "string",
+          "description": "Specifies a filter as a regular expression, events that do not match the filter are dropped, the default is to let all events through",
+          "required": false
+        },
+        "synchronous_mode": {
+          "type": "bool",
+          "description": "Specifies the event handler is syncronous (receive event and send response)",
+          "required": false,
+          "default": false
+        },
+        "synchronous_peer": {
+          "type": "string",
+          "description": "The peer event handler (output for input or input for output) of this event handler in synchronous mode, this parameter is mandatory if the event handler is in synchronous mode",
+          "required": false,
+          "default": ""
+        },
+        "synchronous_timeout": {
+          "type": "int",
+          "description": "The timeout in milliseconds for responses to be issued by APEX torequests, this parameter is mandatory if the event handler is in synchronous mode",
+          "required": false,
+          "default": ""
+        },
+        "requestor_mode": {
+          "type": "bool",
+          "description": "Specifies the event handler is in requestor mode (send event and wait for response mode)",
+          "required": false,
+          "default": false
+        },
+        "requestor_peer": {
+          "type": "string",
+          "description": "The peer event handler (output for input or input for output) of this event handler in requestor mode, this parameter is mandatory if the event handler is in requestor mode",
+          "required": false,
+          "default": ""
+        },
+        "requestor_timeout": {
+          "type": "int",
+          "description": "The timeout in milliseconds for wait for responses to requests, this parameter is mandatory if the event handler is in requestor mode",
+          "required": false,
+          "default": ""
+        }
+      }
+    },
+    "onap.datatypes.policies.controlloop.operational.apex.CarrierTechnology": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "label": {
+          "type": "string",
+          "description": "The label (name) of the carrier technology (such as REST, Kafka, WebSocket)",
+          "required": true
+        },
+        "plugin_parameter_class_name": {
+          "type": "string",
+          "description": "The class name of the class that overrides default handling of event input or output for this carrier technology, defaults to the supplied input or output class",
+          "required": false
+        }
+      }
+    },
+    "onap.datatypes.policies.controlloop.operational.apex.EventProtocol": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "label": {
+          "type": "string",
+          "description": "The label (name) of the event protocol (such as Yaml, JSON, XML, or POJO)",
+          "required": true
+        },
+        "event_protocol_plugin_class": {
+          "type": "string",
+          "description": "The class name of the class that overrides default handling of the event protocol for this carrier technology, defaults to the supplied event protocol class",
+          "required": false
+        }
+      }
+    },
+    "onap.datatypes.policies.controlloop.operational.apex.Environmental": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "name": {
+          "type": "string",
+          "description": "The name of the environment variable",
+          "required": true
+        },
+        "value": {
+          "type": "string",
+          "description": "The value of the environment variable",
+          "required": true
+        }
+      }
+    },
+    "onap.datatypes.policies.controlloop.operational.apex.engineservice.Engine": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "context": {
+          "type": "onap.datatypes.policies.controlloop.operational.apex.engineservice.engine.Context",
+          "description": "The properties for handling context in APEX engines, defaults to using Java maps for context",
+          "required": false
+        },
+        "executors": {
+          "type": "map",
+          "description": "The plugins for policy executors used in engines such as javascript, MVEL, Jython",
+          "required": true,
+          "entry_schema": {
+            "description": "The plugin class path for this policy executor",
+            "type": "string"
+          }
+        }
+      }
+    },
+    "onap.datatypes.policies.controlloop.operational.apex.engineservice.engine.Context": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "distributor": {
+          "type": "onap.datatypes.policies.controlloop.operational.apex.Plugin",
+          "description": "The plugin to be used for distributing context between APEX PDPs at runtime",
+          "required": false
+        },
+        "schemas": {
+          "type": "map",
+          "description": "The plugins for context schemas available in APEX PDPs such as Java and Avro",
+          "required": false,
+          "entry_schema": {
+            "type": "onap.datatypes.policies.controlloop.operational.apex.Plugin"
+          }
+        },
+        "locking": {
+          "type": "onap.datatypes.policies.controlloop.operational.apex.plugin",
+          "description": "The plugin to be used for locking context in and between APEX PDPs at runtime",
+          "required": false
+        },
+        "persistence": {
+          "type": "onap.datatypes.policies.controlloop.operational.apex.Plugin",
+          "description": "The plugin to be used for persisting context for APEX PDPs at runtime",
+          "required": false
+        }
+      }
+    },
+    "onap.datatypes.policies.controlloop.operational.apex.Plugin": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "name": {
+          "type": "string",
+          "description": "The name of the executor such as Javascript, Jython or MVEL",
+          "required": true
+        },
+        "plugin_class_name": {
+          "type": "string",
+          "description": "The class path of the plugin class for this executor"
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/examples/examples-onap-vcpe/src/main/resources/tosca/ToscaTemplate.json b/examples/examples-onap-vcpe/src/main/resources/tosca/ToscaTemplate.json
new file mode 100644 (file)
index 0000000..c0ea897
--- /dev/null
@@ -0,0 +1,19 @@
+{
+  "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+  "topology_template": {
+    "policies": [
+      {
+        "operational.vcpe": {
+          "type": "onap.policies.controlloop.operational.Apex",
+          "typeVersion": "1.0.0",
+          "name": "onap.policies.controlloop.operational.apex.Vcpe",
+          "version": "1.0.0",
+          "properties": {
+            "content": {
+            }
+          }
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file