— Service Logic Interpreter — Dan Timoney — 2014-11-12 —

Supported node types

The following built-in node types are currently supported:

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

<block>
  <record plugin="org.onap.ccsdk.sli.core.sli.recording.FileRecorder">
    <parameter name="file" value="/tmp/sample_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>

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

<call rpc="svc-topology-reserve" mode="sync" />

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

<for index="i" start="0" end="`$service-data.universal-cpe-ft.l2-switch-interfaces_length`">
   <record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
      <parameter name="logger" value="message-log"/>
      <parameter name="level" value="info"/>
      <parameter name="field1" value="`'current l2-switch-interface name is ' + $service-data.universal-cpe-ft.l2-switch-interfaces[$i].name`"/>
   </record>
</for>

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

<return status="failure">
  <parameter name="error-code" value="1542" />
  <parameter name="error-message" value="Activation failure" />
</return>

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

<set>
  <parameter name="vlan" value="$network.provider-segmentation-id" />
</set>

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

<switch test="$uni-cir-units">
  <outcome value="Mbps">
    <reserve plugin="org.onap.ccsdk.sli.adaptors.samplesvc.SampleServiceResource"
             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.onap.ccsdk.sli.adaptors.samplesvc.SampleServiceResource"
             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>

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

<configure adaptor="org.onap.ccsdk.sli.adaptors.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.onap.ccsdk.sli.core.sli.recording.FileRecorder">
        <parameter name="file" value="/tmp/sample_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>

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

<execute plugin="org.onap.ccsdk.sli.plugins.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>

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

<record plugin="org.onap.ccsdk.sli.core.sli.recording.FileRecorder">
  <parameter name="file" value="/tmp/sample_r1.log" />
  <parameter name="field1" value="__TIMESTAMP__"/>
  <parameter name="field2" value="ACTIVE"/>
  <parameter name="field3" value="$uni-circuit-id"/>
</record>

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

<delete plugin="org.onap.ccsdk.sli.adaptors.samplesvc.SampleServiceResource"
        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>

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

<exists plugin="org.onap.ccsdk.sli.adaptors.samplesvc.SampleServiceResource"
        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>

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

<get-resource plugin="org.onap.ccsdk.sli.adaptors.samplesvc.SampleServiceResource"
              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>

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

<is-available plugin="org.onap.ccsdk.sli.adaptors.samplesvc.SampleServiceResource"
              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>

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

<notify plugin="org.onap.ccsdk.sli.adaptors.samplesvc.SampleServiceResource"
              resource="ase-port"
              action="ADD">
  <outcome value="success">
    <return status="success"/>
  </outcome>
  <outcome value="Other">
    <return status="failure"/>
  </outcome>
</notify>

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

<release plugin="org.onap.ccsdk.sli.adaptors.SampleServiceResource"
         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>

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

<reserve plugin="org.onap.ccsdk.sli.adaptors.samplesvc.SampleServiceResource"
         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>

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

<save plugin="`$sample-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="oam-ipv4-address" value="`$vce-ipv4-oam-addr.ipv4-addr`" />
</save>

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

<update plugin="`$sample-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="oam-ipv4-address" value="`$vce-ipv4-oam-addr.ipv4-addr`" />
</update>