.. container:: paragraph
A simple verification of an APEX installation can be done by
- simply starting the APEX engine without any configuration. On
+ simply starting the APEX engine without specifying a tosca policy. On
Unix (or Cygwin) start the engine using
``$APEX_HOME/bin/apexApps.sh engine``. On Windows start the engine
using ``%APEX_HOME%\bin\apexApps.bat engine``. The engine will fail
:number-lines:
Starting Apex service with parameters [] . . .
- start of Apex service failed: Apex configuration file was not specified as an argument
- 2018-09-03 13:11:33,914 Apex [main] ERROR o.o.p.a.service.engine.main.ApexMain - start of Apex service failed
- org.onap.policy.apex.model.basicmodel.concepts.ApexException: Apex configuration file was not specified as an argument
- at org.onap.policy.apex.service.engine.main.ApexCommandLineArguments.validateReadableFile(ApexCommandLineArguments.java:267)
- at org.onap.policy.apex.service.engine.main.ApexCommandLineArguments.validate(ApexCommandLineArguments.java:161)
- at org.onap.policy.apex.service.engine.main.ApexMain.<init>(ApexMain.java:68)
- at org.onap.policy.apex.service.engine.main.ApexMain.main(ApexMain.java:165)
- usage: org.onap.policy.apex.service.engine.main.ApexMain [options...]
- options
- -c,--config-file <CONFIG_FILE>the full path to the configuration file to use, the configuration file must be a Json file
- containing the Apex configuration parameters
- -h,--help outputs the usage of this command
- -m,--model-file <MODEL_FILE> the full path to the model file to use, if set it overrides the model file set in the
- configuration file
- -v,--version outputs the version of Apex
+ start of Apex service failed.
+ org.onap.policy.apex.model.basicmodel.concepts.ApexException: Arguments validation failed.
+ at org.onap.policy.apex.service.engine.main.ApexMain.populateApexParameters(ApexMain.java:238)
+ at org.onap.policy.apex.service.engine.main.ApexMain.<init>(ApexMain.java:86)
+ at org.onap.policy.apex.service.engine.main.ApexMain.main(ApexMain.java:351)
+ Caused by: org.onap.policy.apex.model.basicmodel.concepts.ApexException: Tosca Policy file was not specified as an argument
+ at org.onap.policy.apex.service.engine.main.ApexCommandLineArguments.validateReadableFile(ApexCommandLineArguments.java:242)
+ at org.onap.policy.apex.service.engine.main.ApexCommandLineArguments.validate(ApexCommandLineArguments.java:172)
+ at org.onap.policy.apex.service.engine.main.ApexMain.populateApexParameters(ApexMain.java:235)
+ ... 2 common frames omitted
Verify Installation - run an Example
####################################
.. container:: paragraph
- You can now try to run apex.
+ Create a Tosca Policy for the SampleDomain example using ApexCliToscaEditor
+ as explained in the section "The APEX CLI Tosca Editor". Assume the tosca policy name is SampleDomain_tosca.json.
+ You can then try to run apex using the ToscaPolicy.
.. container:: listingblock
.. code::
:number-lines:
- # $APEX_HOME/bin/apexApps.sh engine -c $APEX_HOME/examples/config/SampleDomain/Stdin2StdoutJsonEventJava.json -m $APEX_HOME/examples/models/SampleDomain/SamplePolicyModelJAVA.json (1)
- >%APEX_HOME%\bin\apexApps.bat engine -c %APEX_HOME%\examples\config\SampleDomain\Stdin2StdoutJsonEventJava.json -m %APEX_HOME%\examples\models\SampleDomain\SamplePolicyModelJAVA.json :: (2)
+ # $APEX_HOME/bin/apexApps.sh engine -p $APEX_HOME/examples/SampleDomain_tosca.json (1)
+ >%APEX_HOME%\bin\apexApps.bat engine -p %APEX_HOME%\examples\SampleDomain_tosca.json(2)
.. container:: colist arabic
.. code::
:number-lines:
- Starting Apex service with parameters [-c, v:/dev/ericsson/apex/onap/apex-pdp/packages/apex-pdp-package-full/target/install_hierarchy/examples/config/SampleDomain/Stdin2StdoutJsonEventJava.json] . . .
+ Starting Apex service with parameters [-p, /home/ubuntu/apex/SampleDomain_tosca.json] . . .
2018-09-05 15:16:42,800 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Created apex engine MyApexEngine-0:0.0.1 .
2018-09-05 15:16:42,804 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Created apex engine MyApexEngine-1:0.0.1 .
2018-09-05 15:16:42,804 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Created apex engine MyApexEngine-2:0.0.1 .
ENV PATH /opt/app/policy/apex-pdp/bin:$PATH
WORKDIR /home/apexuser
+Running APEX in Standalone mode
+-------------------------------
+
+ .. container:: paragraph
+
+ APEX Engine can run in standalone mode by taking in a ToscaPolicy
+ as an argument and executing it.
+ Assume there is a tosca policy named ToscaPolicy.json in APEX_HOME directory
+ This policy can be executed in standalone mode using any of the below methods.
+
+Run in an APEX installation
+###########################
+
+ .. container:: listingblock
+
+ .. container:: content
+
+ .. code::
+ :number-lines:
+
+ # $APEX_HOME/bin/apexApps.sh engine -p $APEX_HOME/ToscaPolicy.json(1)
+ >%APEX_HOME%\bin\apexApps.bat engine -p %APEX_HOME%\ToscaPolicy.json(2)
+
+.. container:: colist arabic
+
+ +-------+---------+
+ | **1** | UNIX |
+ +-------+---------+
+ | **2** | Windows |
+ +-------+---------+
+
+Run in a docker container
+#########################
+
+ .. container:: listingblock
+
+ .. container:: content
+
+ .. code::
+ :number-lines:
+
+ # docker run -p 6969:6969 -v $APEX_HOME/ToscaPolicy.json:/tmp/policy/ToscaPolicy.json \
+ --name apex -it nexus3.onap.org:10001/onap/policy-apex-pdp:latest /bin/bash \
+ -c "/opt/app/policy/apex-pdp/bin/apexEngine.sh -p /tmp/policy/ToscaPolicy.json"
+
APEX Configurations Explained
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
"id" : 45, (3)
"instanceCount" : 4, (4)
"deploymentPort" : 12345, (5)
- "policyModelFileName" : "examples/models/VPN/VPNPolicyModelJava.json", (6a)
- "policy_type_impl" : {...}, (6b)
+ "policy_type_impl" : {...}, (6)
"periodicEventPeriod": 1000, (7)
"engineParameters":{ (8)
"executorParameters":{...}, (9)
| | Websocket connection to the |
| | engine |
+-----------------------------------+-----------------------------------+
- | **6a** | the APEX policy model file to |
- | | load into the engine on startup |
- | | when APEX is running native |
- | | policies in standalone mode |
- | | (optional) |
- +-----------------------------------+-----------------------------------+
- | **6b** | the APEX policy model as a JSON |
+ | **6** | the APEX policy model as a JSON |
| | or YAML block to load into the |
| | engine on startup when |
| | APEX is running a policy that has |
| **18** | any other output configuration (e.g. event name filter, see below) |
+--------+--------------------------------------------------------------------+
+Event Name
+##########
+
+ .. container:: paragraph
+
+ Any event defined in APEX has to be unique. The "name" of
+ of an event is used as an identifier for an ApexEvent. Every
+ event has to be tagged to an eventName. This can be done in different
+ ways. Either the actual event can have a field called "name". Or, the
+ event has some other field that can act as the identifier, which can be
+ specified using "nameAlias". But in other cases, where a "name" or "nameAlias"
+ cannot be specified, the incoming event coming over an endpoint can be
+ manually tagged to an "eventName" before consuming it.
+
+ .. container:: paragraph
+
+ The "eventName" can have a single event's name if the event coming
+ over the endpoint has to be always mapped to the specified eventName's
+ definition. Otherwise, if different events can come over the endpoint,
+ then "eventName" field can consist of multiple event names separated by
+ "|" symbol. In this case, based on the received event's structure, it is
+ mapped to any one of the event name specified in the "eventName" field.
+
+ .. container:: paragraph
+
+ The following code shows some examples on how to specify the eventName field:
+
+ .. container:: listingblock
+
+ .. container:: content
+
+ .. code::
+
+ "eventInputParameters": {
+ "Input1": {
+ "carrierTechnologyParameters" : {...},
+ "eventProtocolParameters":{...},
+ "eventName" : "VesEvent" (1)
+ },
+ "Input2": {
+ "carrierTechnologyParameters" : {...},
+ "eventProtocolParameters":{...},
+ "eventName" : "AAISuccessResponseEvent|AAIFailureResponseEvent" (2)
+ }
+ }
+
Event Filters
#############
"id" : 45,
"instanceCount" : 4,
"deploymentPort" : 12345,
- "policyModelFileName" : "examples/models/some-model.json",
"engineParameters" : {
"executorParameters" : {
"JAVASCRIPT" : {
.. container:: paragraph
- The APEX engine comes with a few CLI arguments for setting
- configuration and policy model. The configuration file is
- always required. The policy model file is only required if
- no model file is specified in the configuration, or if the
- specified model file should be over written. The option
- ``-h`` prints a help screen.
+ The APEX engine comes with a few CLI arguments, the main one is for setting
+ the tosca policy file for execution. The tosca policy file is
+ always required. The option ``-h`` prints a help screen.
.. container:: listingblock
usage: org.onap.policy.apex.service.engine.main.ApexMain [options...]
options
- -c,--config-file <CONFIG_FILE> the full path to the configuration file to use, the configuration file must be a Json file
- containing the Apex configuration parameters
- -h,--help outputs the usage of this command
- -m,--model-file <MODEL_FILE> the full path to the model file to use, if set it overrides the model file set in the
- configuration file
- -v,--version outputs the version of Apex
+ -p,--tosca-policy-file <TOSCA_POLICY_FILE> the full path to the ToscaPolicy file to use.
+ -h,--help outputs the usage of this command
+ -v,--version outputs the version of Apex
The APEX CLI Editor
-------------------
</logger>
</configuration>
+Unsupported Features
+^^^^^^^^^^^^^^^^^^^^
+
+ .. container:: paragraph
+
+ This section documents some legacy and unsupported features
+ in apex-pdp. The documentation here has not been updated for
+ recent versions of apex-pdp. For example, the apex-pdp models
+ specified in this example should now be in TOSCA format.
+
Building a System with Websocket Backend
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+----------------------------------------
Websockets
-----------
+##########
.. container:: paragraph
does not support WAMP at the moment.
Websocket in Java
------------------
+#################
.. container:: paragraph
Netty, … there are also Kafka extensions for Websockets.
Websocket Example Code for Websocket clients (FOSS)
----------------------------------------------------
+###################################################
.. container:: paragraph
example <http://www.programmingforliving.com/2013/08/jsr-356-java-api-for-websocket-client-api.html>`__
BCP: Websocket Configuration
-----------------------------
+############################
.. container:: paragraph
reconnected manually after an APEX boot.
Demo with VPN Policy Model
---------------------------
+##########################
.. container:: paragraph
in an editor (we need to send those events to APEX)
A Websocket Configuration for the VPN Domain
-############################################
+********************************************
.. container:: paragraph
}
Start APEX Engine
-#################
+*****************
.. container:: paragraph
policy is triggered/executed.
Run the Websocket Echo Client
-#############################
+*****************************
.. container:: paragraph
ws-simple-echo: opened connection to APEX (Web Socket Protocol Handshake)
Run the Websocket Console Client
-################################
+********************************
.. container:: paragraph
ws-simple-console: opened connection to APEX (Web Socket Protocol Handshake)
Send Events
-###########
+***********
.. container:: paragraph
.. container::
:name: footer-text
-
-
-