--- Service Logic Interpreter --- Dan Timoney --- 2014-11-12 ---
Supported node types
====================
The following built-in node types are currently supported:
- Flow Control
- `**block** <#Block_node>`__
- `**call** <#Call_node>`__
- `**for** <#For_node>`__
- `**return** <#Return_node>`__
- `**set** <#Set_node>`__
- `**switch** <#Switch_node>`__
- Device Management
- `**configure** <#Configure_node>`__
- Java Plugin Support
- `**execute** <#Execute_node>`__
- Recording
- `**record** <#Record_node>`__
- Resource Management
- `**delete** <#Delete_node>`__
- `**exists** <#Exists_node>`__
- `**get-resource** <#Get-resource_node>`__
- `**is-available** <#Is-available_node>`__
- `**notify** <#Notify_node>`__
- `**release** <#Release_node>`__
- `**reserve** <#Reserve_node>`__
- `**save** <#Save_node>`__
- `**update** <#Update_node>`__
Flow Control
------------
Block node
~~~~~~~~~~
Description
^^^^^^^^^^^
A **block** node is used to executes a set of nodes.
Attributes
^^^^^^^^^^
+--------------+-----------------------------------------------------------------------------------------------------------------------------------+
| **atomic** | if *true*, then if a node returns failure, subsequent nodes will not be executed and nodes already executed will be backed out. |
+--------------+-----------------------------------------------------------------------------------------------------------------------------------+
Parameters
^^^^^^^^^^
None
Outcomes
^^^^^^^^
None
Example
^^^^^^^
::
Call node
~~~~~~~~~
Description
^^^^^^^^^^^
A **call** node is used to call another graph
Attributes
^^^^^^^^^^
+---------------+------------------------------------------------------------------------------------+
| **module** | Module of directed graph to call. If unset, defaults to that of calling graph |
+---------------+------------------------------------------------------------------------------------+
| **rpc** | rpc of directed graph to call. |
+---------------+------------------------------------------------------------------------------------+
| **version** | version of graph to call, If unset, uses active version. |
+---------------+------------------------------------------------------------------------------------+
| **mode** | mode (sync/async) of graph to call. If unset, defaults to that of calling graph. |
+---------------+------------------------------------------------------------------------------------+
Parameters
^^^^^^^^^^
Not applicable
Outcomes
^^^^^^^^
+-----------------+------------------------------+
| **success** | Sub graph returned success |
+-----------------+------------------------------+
| **not-found** | Graph not found |
+-----------------+------------------------------+
| **failure** | Subgraph returned success |
+-----------------+------------------------------+
Table: .
Example
^^^^^^^
::
For node
~~~~~~~~
Description
^^^^^^^^^^^
A **for** node provides a fixed iteration looping mechanism, similar to
the Java for loop
Attributes
^^^^^^^^^^
+-------------+------------------+
| **index** | index variable |
+-------------+------------------+
| **start** | initial value |
+-------------+------------------+
| **end** | maximum value |
+-------------+------------------+
Parameters
^^^^^^^^^^
Not applicable.
Outcomes
^^^^^^^^
Not applicable. The **status** node has no outcomes.
Example
^^^^^^^
::
Return node
~~~~~~~~~~~
Description
^^^^^^^^^^^
A **return** node is used to return a status to the invoking MD-SAL
application
Attributes
^^^^^^^^^^
+--------------+---------------------------------------------------+
| **status** | Status value to return (*success* or *failure*) |
+--------------+---------------------------------------------------+
Parameters
^^^^^^^^^^
The following optional parameters may be passed to convey more detailed
status information.
+---------------------+-----------------------------------------------------------------+
| **error-code** | A brief, usually numeric, code indicating the error condition |
+---------------------+-----------------------------------------------------------------+
| **error-message** | A more detailed error message |
+---------------------+-----------------------------------------------------------------+
Outcomes
^^^^^^^^
Not applicable. The **status** node has no outcomes.
Example
^^^^^^^
::
Set node
~~~~~~~~
Description
^^^^^^^^^^^
A **set** node is used to set one or more values in the execution
context
Attributes
^^^^^^^^^^
+---------------------+-------------------------------------------------------------------------------------+
| **only-if-unset** | If true the set node will only execute if the current value of the target is null |
+---------------------+-------------------------------------------------------------------------------------+
Parameters
^^^^^^^^^^
Values to be set are passed as parameters
Outcomes
^^^^^^^^
Not applicable. The **set** node has no outcomes.
Example
^^^^^^^
::
Switch node
~~~~~~~~~~~
Description
^^^^^^^^^^^
A **switch** node is used to make a decision based on its **test**
attribute.
Attributes
^^^^^^^^^^
+------------+---------------------+
| **test** | Condition to test |
+------------+---------------------+
Parameters
^^^^^^^^^^
None
Outcomes
^^^^^^^^
Depends on the **test** condition
Example
^^^^^^^
::
Device Management
-----------------
Configure node
~~~~~~~~~~~~~~
Description
^^^^^^^^^^^
A **configure** node is used to configure a device.
Attributes
^^^^^^^^^^
+----------------+-----------------------------------------------------------------------------------+
| **adaptor** | Fully qualified Java class of resource adaptor to be used |
+----------------+-----------------------------------------------------------------------------------+
| **activate** | Activate device/interface, for devices that support a separate activation step. |
+----------------+-----------------------------------------------------------------------------------+
| **key** | SQL-like string specifying criteria for item to configure |
+----------------+-----------------------------------------------------------------------------------+
Parameters
^^^^^^^^^^
Specific to device adaptor.
Outcomes
^^^^^^^^
+----------------------+------------------------------------------------------------------+
| **success** | Device successfully configured |
+----------------------+------------------------------------------------------------------+
| **not-found** | Element to be configured does not exist. |
+----------------------+------------------------------------------------------------------+
| **not-ready** | Element is not in a state where it can be configured/activated |
+----------------------+------------------------------------------------------------------+
| **already-active** | Attempt to activate element that is already active |
+----------------------+------------------------------------------------------------------+
| **failure** | Configure failed for some other reason |
+----------------------+------------------------------------------------------------------+
Example
^^^^^^^
::
Java Plugin Support
-------------------
Execute node
~~~~~~~~~~~~
Description
^^^^^^^^^^^
An **execute** node is used to execute Java code supplied as a plugin
Attributes
^^^^^^^^^^
+--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| **plugin** | Fully qualified Java class of plugin to be used |
+--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| **method** | Name of method in the plugin class to execute. Method must return void, and take 2 arguments: a Map (for parameters) and a SvcLogicContext (to allow plugin read/write access to context memory) |
+--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Parameters
^^^^^^^^^^
Specific to plugin / method
Outcomes
^^^^^^^^
+--------------------------+-----------------------------------------------------------------+
| **success** | Device successfully configured |
+--------------------------+-----------------------------------------------------------------+
| **not-found** | Plugin class could not be loaded |
+--------------------------+-----------------------------------------------------------------+
| **unsupported-method** | Named method taking (Map, SvcLogicContext) could not be found |
+--------------------------+-----------------------------------------------------------------+
| **failure** | Configure failed for some other reason |
+--------------------------+-----------------------------------------------------------------+
Example
^^^^^^^
::
Recording
---------
Record node
~~~~~~~~~~~
Description
^^^^^^^^^^^
A **record** node is used to record an event. For example, this might be
used to log provisioning events.
Attributes
^^^^^^^^^^
+--------------+---------------------------------------------------+
| **plugin** | Fully qualified Java class to handle recording. |
+--------------+---------------------------------------------------+
Parameters
^^^^^^^^^^
Parameters will depend on the plugin being used. For the FileRecorder
class, the parameters are as follows
+--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| **file** | The file to which the record should be written |
+--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| **field1** | First field to write. There will be **field** parameters for each field to write, from **field1** through **fieldN**. A special value \_\_TIMESTAMP\_\_ may be assigned to a field to insert the current timestamp |
+--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Outcomes
^^^^^^^^
+---------------+--------------------------------------------+
| **success** | Record successfully written |
+---------------+--------------------------------------------+
| **failure** | Record could not be successfully written |
+---------------+--------------------------------------------+
Example
^^^^^^^
::
Resource Management
-------------------
Delete node
~~~~~~~~~~~
Description
^^^^^^^^^^^
A **delete** node is used to delete a resource from the local resource
inventory.
Attributes
^^^^^^^^^^
+----------------+-------------------------------------------------------------+
| **plugin** | Fully qualified Java class of resource adaptor to be used |
+----------------+-------------------------------------------------------------+
| **resource** | Type of resource to delete |
+----------------+-------------------------------------------------------------+
| **key** | SQL-like string specifying key to delete |
+----------------+-------------------------------------------------------------+
Parameters
^^^^^^^^^^
None
Outcomes
^^^^^^^^
+---------------+--------------------------------------------+
| **success** | Resource specified deleted successfully. |
+---------------+--------------------------------------------+
| *failure*> | Resource specified was not deleted |
+---------------+--------------------------------------------+
Example
^^^^^^^
::
Exists node
~~~~~~~~~~~
Description
^^^^^^^^^^^
An **exists** node is used to determine whether a particular instance of
a resource exists. For example, this might be used to test whether a
particular switch CLLI is provisioned.
Attributes
^^^^^^^^^^
+----------------+-------------------------------------------------------------+
| **plugin** | Fully qualified Java class of resource adaptor to be used |
+----------------+-------------------------------------------------------------+
| **resource** | Type of resource to check |
+----------------+-------------------------------------------------------------+
| **key** | SQL-like string specifying key to check for |
+----------------+-------------------------------------------------------------+
Parameters
^^^^^^^^^^
None
Outcomes
^^^^^^^^
+-------------+---------------------------------+
| **true** | Resource specified exists. |
+-------------+---------------------------------+
| **false** | Resource specified is unknown |
+-------------+---------------------------------+
Example
^^^^^^^
::
Get-resource node
~~~~~~~~~~~~~~~~~
Description
^^^^^^^^^^^
A **get-resource** node is used to retrieve information about a
particular resource and make it available to other nodes in the service
logic tree. For example, this might be used to retrieve information
about a particular uni-port.
Attributes
^^^^^^^^^^
+----------------+------------------------------------------------------------------------------------------+
| **plugin** | Fully qualified Java class of resource adaptor to be used |
+----------------+------------------------------------------------------------------------------------------+
| **resource** | Type of resource to retrieve |
+----------------+------------------------------------------------------------------------------------------+
| **key** | SQL-like string specifying criteria for retrieval |
+----------------+------------------------------------------------------------------------------------------+
| **pfx** | Prefix to add to context variable names set for data retrieved |
+----------------+------------------------------------------------------------------------------------------+
| **select** | String to specify, if key matches multiple entries, which entry should take precedence |
+----------------+------------------------------------------------------------------------------------------+
| **order-by** | Prefix to add to context variable names set for data retrieved |
+----------------+------------------------------------------------------------------------------------------+
Parameters
^^^^^^^^^^
None
Outcomes
^^^^^^^^
+-----------------+--------------------------------------------------+
| **success** | Resource successfully retrieved |
+-----------------+--------------------------------------------------+
| **not-found** | Resource referenced does not exist |
+-----------------+--------------------------------------------------+
| **failure** | Resource retrieve failed for some other reason |
+-----------------+--------------------------------------------------+
Example
^^^^^^^
::
Is-available node
~~~~~~~~~~~~~~~~~
Description
^^^^^^^^^^^
An **is-available** node is used to determine whether a particular type
of resource is available. For example, this might be used to test
whether any ports are available for assignment on a particular switch.
Attributes
^^^^^^^^^^
+----------------+------------------------------------------------------------------+
| **plugin** | Fully qualified Java class of resource adaptor to be used |
+----------------+------------------------------------------------------------------+
| **resource** | Type of resource to check |
+----------------+------------------------------------------------------------------+
| **key** | SQL-like string specifying key to check for |
+----------------+------------------------------------------------------------------+
| **pfx** | Prefix to add to context variable names set for data retrieved |
+----------------+------------------------------------------------------------------+
Parameters
^^^^^^^^^^
None
Outcomes
^^^^^^^^
+-------------+---------------------------------------+
| **true** | Resource requested is available |
+-------------+---------------------------------------+
| **false** | Resource requested is not available |
+-------------+---------------------------------------+
Example
^^^^^^^
::
Notify node
~~~~~~~~~~~
Description
^^^^^^^^^^^
A **notify** node is used to inform an external application (e.g. A&AI)
that a resource was updated.
Attributes
^^^^^^^^^^
+----------------+---------------------------------------------------------------------+
| **plugin** | Fully qualified Java class of resource adaptor to be used |
+----------------+---------------------------------------------------------------------+
| **resource** | Identifies resource that was updated |
+----------------+---------------------------------------------------------------------+
| **action** | Action that triggered notification to be sent (ADD/UPDATE/DELETE) |
+----------------+---------------------------------------------------------------------+
Parameters
^^^^^^^^^^
None
Outcomes
^^^^^^^^
+---------------+----------------------------------------+
| **success** | Notification was successful |
+---------------+----------------------------------------+
| **failure** | Notification failed is not available |
+---------------+----------------------------------------+
Example
^^^^^^^
::
Release node
~~~~~~~~~~~~
Description
^^^^^^^^^^^
A **release** node is used to mark a resource as no longer in use, and
thus available for assignment.
Attributes
^^^^^^^^^^
+----------------+------------------------------------------------------------------+
| **plugin** | Fully qualified Java class of resource adaptor to be used |
+----------------+------------------------------------------------------------------+
| **resource** | Type of resource to release |
+----------------+------------------------------------------------------------------+
| **key** | SQL-like string specifying key to check of resource to release |
+----------------+------------------------------------------------------------------+
Parameters
^^^^^^^^^^
None
Outcomes
^^^^^^^^
+-----------------+-------------------------------------------------+
| **success** | Resource successfully released |
+-----------------+-------------------------------------------------+
| **not-found** | Resource referenced does not exist |
+-----------------+-------------------------------------------------+
| **failure** | Resource release failed for some other reason |
+-----------------+-------------------------------------------------+
Example
^^^^^^^
::
Reserve node
~~~~~~~~~~~~
Description
^^^^^^^^^^^
A **reserve** node is used to reserve a particular type of resource..
For example, this might be used to reserve a port on a particular
switch.
Attributes
^^^^^^^^^^
+----------------+----------------------------------------------------------------------------------------------+
| **plugin** | Fully qualified Java class of resource adaptor to be used |
+----------------+----------------------------------------------------------------------------------------------+
| **resource** | Type of resource to reserve |
+----------------+----------------------------------------------------------------------------------------------+
| **key** | SQL-like string specifying criteria for reservation |
+----------------+----------------------------------------------------------------------------------------------+
| **select** | String to specify, if **key** matches multiple entries, which entry should take precedence |
+----------------+----------------------------------------------------------------------------------------------+
Parameters
^^^^^^^^^^
None
Outcomes
^^^^^^^^
+---------------+----------------------------------------------------+
| **success** | Resource requested was successfully reserved |
+---------------+----------------------------------------------------+
| **failure** | Resource requested was not successfully reserved |
+---------------+----------------------------------------------------+
Example
^^^^^^^
::
Save node
~~~~~~~~~
Description
^^^^^^^^^^^
A **save** node is used to save information about a particular resource
to persistent storage. For example, this might be used to save
information about a particular uni-port.
Attributes
^^^^^^^^^^
+----------------+------------------------------------------------------------------------------------------+
| **plugin** | Fully qualified Java class of resource adaptor to be used |
+----------------+------------------------------------------------------------------------------------------+
| **resource** | Type of resource to save |
+----------------+------------------------------------------------------------------------------------------+
| **key** | SQL-like string specifying criteria for retrieval |
+----------------+------------------------------------------------------------------------------------------+
| **force** | If "true", save resource even if this resource is already stored in persistent storage |
+----------------+------------------------------------------------------------------------------------------+
| **pfx** | Prefix to be prepended to variable names, when attributes are set in SvcLogicContext |
+----------------+------------------------------------------------------------------------------------------+
Parameters
^^^^^^^^^^
Values to save (columns) are specified as parameters, with each name
corresponding to a column name and each value corresponding to the value
to set.
Outcomes
^^^^^^^^
+---------------+-------------------------------+
| **success** | Resource successfully saved |
+---------------+-------------------------------+
| **failure** | Resource save failed |
+---------------+-------------------------------+
Example
^^^^^^^
::
Update node
~~~~~~~~~~~
Description
^^^^^^^^^^^
An **update** node is used to update information about a particular
resource to persistent storage.
Attributes
^^^^^^^^^^
+----------------+----------------------------------------------------------------------------------------+
| **plugin** | Fully qualified Java class of resource adaptor to be used |
+----------------+----------------------------------------------------------------------------------------+
| **resource** | Type of resource to update |
+----------------+----------------------------------------------------------------------------------------+
| **key** | SQL-like string specifying criteria for retrieval |
+----------------+----------------------------------------------------------------------------------------+
| **pfx** | Prefix to be prepended to variable names, when attributes are set in SvcLogicContext |
+----------------+----------------------------------------------------------------------------------------+
Parameters
^^^^^^^^^^
Values to save (columns) are specified as parameters, with each name
corresponding to a column name and each value corresponding to the value
to set.
Outcomes
^^^^^^^^
+---------------+-------------------------------+
| **success** | Resource successfully saved |
+---------------+-------------------------------+
| **failure** | Resource save failed |
+---------------+-------------------------------+
Example
^^^^^^^
::