--- 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 ^^^^^^^ ::