You can think of the JSON as Directed Graph source code and the XML as compiled code. The XML must conform to the schema at https://gerrit.onap.org/r/gitweb?p=ccsdk/sli/core.git;a=blob;f=sli/common/src/main/resources/svclogic.xsd;hb=refs/heads/master. The XML schema reveals what nodes are supported and which attributes are appropriate for each node. This page explains each node in plain English with accompanying code snippets as an alternative to reading the schema file itself.
The following built-in node types are currently supported:
A block node is used to executes a set of nodes.
atomic | if true, then if a node returns failure, subsequent nodes will not be executed and nodes already executed will be backed out. If unset it is treated as false. |
None
None
<block> <record plugin="org.openecomp.sdnc.sli.recording.FileRecorder"> <parameter name="file" value="/tmp/gamma_r1.log" /> <parameter name="field1" value="__TIMESTAMP__"/> <parameter name="field2" value="RESERVED"/> <parameter name="field3" value="$asePort.uni_circuit_id"/> </record> <return status="success"> <parameter name="uni-circuit-id" value="$asePort.uni_circuit_id" /> </return> </block> |
A break node is used to break out of a for or while loop.
None
None
None
<break/> |
A call node is used to call another graph
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. |
Not applicable
success | Sub graph returned success |
not-found | Graph not found |
failure | Subgraph returned success |
<call rpc="svc-topology-reserve" mode="sync" /> |
An exit node is used to exit a graph without further execution
None
Not applicable
None
<exit/> |
A for node provides a fixed iteration looping mechanism, similar to the Java for loop
atomic | if true, then if a node returns failure, subsequent nodes will not be executed and nodes already executed will be backed out. If unset it is treated as true. |
index | index variable |
start | initial value |
end | maximum value |
silentFailure | Optional boolean, when true for loops will not throw an exception for a null or invalid index. If unset it is treated as false. |
Not applicable.
Not applicable. The status node has no outcomes.
<for index="i" start="0" end="$network.num-segments"> <set> <parameter name="$vlanlist" value="eval($vlanlist+','+$network.segment[i].provider-segmentation-id)"/> </set> </for> |
A return node is used to return a status to the invoking MD-SAL application. The return node does not prevent the execution of subsequent nodes. The status set by the return node is tested by atomic for and block nodes.
status | Status value to return (success or failure) |
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 |
Not applicable. The status node has no outcomes.
<return status="failure"> <parameter name="error-code" value="1542" /> <parameter name="error-message" value="Activation failure" /> </return> |
A set node is used to set one or more values in the execution context
only-if-unset | If true the set node will only execute if the current value of the target is null |
Values to be set are passed as parameters
Not applicable. The set node has no outcomes.
<set> <parameter name="vlan" value="$network.provider-segmentation-id" /> </set> |
A switch node is used to make a decision based on its test attribute.
test | Condition to test |
None
Depends on the test condition
<switch test="$uni-cir-units"> <outcome value="Mbps"> <reserve plugin="org.openecomp.sdnc.sli.resource.gamma.GammaResource" resource="ase-port" key="resource-emt-clli == $edge-device-clli and speed >= $uni-cir-value" pfx="asePort"> <outcome value="success"> <return status="success"> <parameter name="uni-circuit-id" value="$asePort.uni_circuit_id" /> </return> </outcome> <outcome value="Other"> <return status="failure"> <parameter name="error-code" value="1010" /> <parameter name="error-message" value="No ports found that match criteria" /> </return> </outcome> </reserve> </outcome> <outcome value="Gbps"> <reserve plugin="org.openecomp.sdnc.sli.resource.gamma.GammaResource" resource="ase-port" key="resource-emt-clli == $edge-device-clli and speed >= $uni-cir-value*1000" pfx="asePort"> <outcome value="success"> <return status="success"> <parameter name="uni-circuit-id" value="$asePort.uni_circuit_id" /> </return> </outcome> <outcome value="Other"> <return status="failure"> <parameter name="error-code" value="1010" /> <parameter name="error-message" value="No ports found that match criteria" /> </return> </outcome> </reserve> </outcome> </switch> |
A while node is used to create a while loop
test | Condition to test |
do | Optional boolean, when true the loop executes once regardless of the test condition |
None
Depends on the test condition
A configure node is used to configure a device.
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 |
Specific to device adaptor.
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 |
<configure adaptor="org.openecomp.sdnc.sli.adaptor.emt.EmtAdaptor" key="$uni-circuit-id" activate="true"> <parameter name="circuit.id" value="$uni-circuit-id" /> <parameter name="subscriber.name" value="$subscriber-name" /> <parameter name="emt.clli" value="$edge-device-clli" /> <parameter name="port.tagging" value="$port-tagging" /> <parameter name="port.mediaSpeed" value="$media-speed" /> <parameter name="location.state" value="$uni-location-state" /> <parameter name="location.city" value="$uni-location-city" /> <parameter name="cosCategory" value="$cos-category" /> <parameter name="gosProfile" value="$gos-profile" /> <parameter name="lldp" value="$asePort.resource-lldp" /> <parameter name="mtu" value="$asePort.resource-mtu" /> <outcome value="success"> <block> <record plugin="org.openecomp.sdnc.sli.recording.FileRecorder"> <parameter name="file" value="/tmp/gamma_r1.log" /> <parameter name="field1" value="__TIMESTAMP__"/> <parameter name="field2" value="ACTIVE"/> <parameter name="field3" value="$uni-circuit-id"/> </record> <return status="success"> <parameter name="edge-device-clli" value="$asePort.resource-emt-clli" /> </return> </block> </outcome> <outcome value="already-active"> <return status="failure"> <parameter name="error-code" value="1590" /> <parameter name="error-message" value="Port already active" /> </return> </outcome> <outcome value="Other"> <return status="failure"> <parameter name="error-code" value="1542" /> <parameter name="error-message" value="Activation failure" /> </return> </outcome> </configure> |
An execute node is used to execute Java code supplied as a plugin
*** Parameters
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) |
emitsOutcome | Optional boolean value, when true the plugin must return a String which should represent an outcome |
Specific to plugin / method
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 |
<execute plugin="org.openecomp.sdnc.sli.plugin.HelloWorld" method="log"> <parameter name="message" value="Hello, world!" /> <outcome value="success"> <return status="success"/> </outcome> <outcome value="not-found"> <return status="failure"> <parameter name="error-code" value="1590" /> <parameter name="error-message" value="Could not locate plugin" /> </return> </outcome> <outcome value="Other"> <return status="failure"> <parameter name="error-code" value="1542" /> <parameter name="error-message" value="Internal error" /> </return> </outcome> </execute> |
A record node is used to record an event. For example, this might be used to log provisioning events.
plugin | Fully qualified Java class to handle recording. |
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 |
success | Record successfully written |
failure | Record could not be successfully written |
<record plugin="org.openecomp.sdnc.sli.recording.FileRecorder"> <parameter name="file" value="/tmp/gamma_r1.log" /> <parameter name="field1" value="__TIMESTAMP__"/> <parameter name="field2" value="ACTIVE"/> <parameter name="field3" value="$uni-circuit-id"/> </record> |
A delete node is used to delete a resource from the local resource inventory.
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 |
None
success | Resource specified deleted successfully. |
failure> | Resource specified was not deleted |
<delete plugin="org.openecomp.sdnc.sli.resource.gamma.GammaResource" resource="ase-port" key="uni_circuit_id == $uni-circuit-id"> <outcome value="true"> <return status="success"/> </outcome> <outcome value="false"> <return status="failure"/> </outcome> </delete> |
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.
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 |
None
true | Resource specified exists. |
false | Resource specified is unknown |
<exists plugin="org.openecomp.sdnc.sli.resource.gamma.GammaResource" resource="ase-port" key="uni_circuit_id == $uni-circuit-id"> <outcome value="true"> <return status="success"/> </outcome> <outcome value="false"> <return status="failure"/> </outcome> </exists> |
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.
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 |
None
success | Resource successfully retrieved |
not-found | Resource referenced does not exist |
failure | Resource retrieve failed for some other reason |
<get-resource plugin="org.openecomp.sdnc.sli.resource.gamma.GammaResource" resource="ase-port" key="uni_circuit_id == $uni-circuit-id" pfx="current-port"> <outcome value="success"> <return status="success"/> </outcome> <outcome value="not-found"> <return status="failure"/> </outcome> <outcome value="failure"> <return status="failure"/> </outcome> </get-resource> |
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.
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 |
None
true | Resource requested is available |
false | Resource requested is not available |
<is-available plugin="org.openecomp.sdnc.sli.resource.gamma.GammaResource" resource="ase-port" key="resource-emt-clli == $edge-device-clli and speed >= $uni-cir-value"> <outcome value="true"> <return status="success"/> </outcome> <outcome value="false"> <return status="failure"/> </outcome> </is-available> |
A notify node is used to inform an external application (e.g. A&AI) that a resource was updated.
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) |
None
success | Notification was successful |
failure | Notification failed is not available |
<notify plugin="org.openecomp.sdnc.sli.resource.gamma.GammaResource" resource="ase-port" action="ADD"> <outcome value="success"> <return status="success"/> </outcome> <outcome value="Other"> <return status="failure"/> </outcome> </notify> |
A release node is used to mark a resource as no longer in use, and thus available for assignment.
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 |
None
success | Resource successfully released |
not-found | Resource referenced does not exist |
failure | Resource release failed for some other reason |
<release plugin="org.openecomp.sdnc.sli.resource.gamma.GammaResource" resource="ase-port" key="uni_circuit_id == $uni-circuit-id"> <outcome value="success"> <return status="success"/> </outcome> <outcome value="not-found"> <return status="failure"/> </outcome> <outcome value="failure"> <return status="failure"/> </outcome> </release> |
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.
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 |
None
success | Resource requested was successfully reserved |
failure | Resource requested was not successfully reserved |
<reserve plugin="org.openecomp.sdnc.sli.resource.gamma.GammaResource" resource="ase-port" key="resource-emt-clli == $edge-device-clli and speed >= $uni-cir-value" select="min(speed)"> <outcome value="success"> <return status="success"/> </outcome> <outcome value="failure"> <return status="failure"/> </outcome> </reserve> |
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.
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 |
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.
success | Resource successfully saved |
failure | Resource save failed |
<save plugin="`$gamma-resource-plugin`" resource="vnf" key="vnf-name = $requests.vnf.vnf-name" force="true" pfx="requests.vnf"> <parameter name="vnf-name" value="`$requests.cust-country-code + $requests.cust-id + $requests.cust-city + $requests.cust-state + '001VCE'`" /> <parameter name="vnf-type" value="vce" /> <parameter name="orchestration-status" value="pending-create" /> <parameter name="heat-stack-id" value="`$requests.heat-stack-id`" /> <parameter name="mso-catalog-key" value="`$requests.mso-catalog-key`" /> <parameter name="availability-zone" value="`$aic-availability-zone.availability-zone`" /> <parameter name="aic-site-id" value="`$requests.vnf.aic-site-id`" /> <parameter name="oam-ipv4-address" value="`$vce-ipv4-oam-addr.ipv4-addr`" /> </save> |
An update node is used to update information about a particular resource to persistent storage.
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 |
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.
success | Resource successfully saved |
failure | Resource save failed |
<update plugin="`$gamma-resource-plugin`" resource="vnf" key="vnf-name = $requests.vnf.vnf-name" pfx="requests.vnf"> <parameter name="vnf-name" value="`$requests.cust-country-code + $requests.cust-id + $requests.cust-city + $requests.cust-state + '001VCE'`" /> <parameter name="vnf-type" value="vce" /> <parameter name="orchestration-status" value="pending-create" /> <parameter name="heat-stack-id" value="`$requests.heat-stack-id`" /> <parameter name="mso-catalog-key" value="`$requests.mso-catalog-key`" /> <parameter name="availability-zone" value="`$aic-availability-zone.availability-zone`" /> <parameter name="aic-site-id" value="`$requests.vnf.aic-site-id`" /> <parameter name="oam-ipv4-address" value="`$vce-ipv4-oam-addr.ipv4-addr`" /> </update> |