Centralize readthedocs docs

Move readthedocs documentation into ccsdk/distribution so that there
is a single CCSDK project parent as opposed to separate repo-specific
parents.

Change-Id: I8f7fc649fd534dfc7e4a00f04728e0233ff4d23c
Issue-ID: CCSDK-140
Signed-off-by: Dan Timoney <dtimoney@att.com>
diff --git a/docs/index.rst b/docs/index.rst
index 833e1aa..bfa4617 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -1,8 +1,15 @@
 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
 
-TODO Add files to toctree and delete this header
-------------------------------------------------
+Common Controller Software Development Kit
+------------------------------------------
 .. toctree::
    :maxdepth: 1
 
+   parent/index.rst
+   platform/plugins/index.rst
+   sli/core/index.rst
+   sli/adaptors/index.rst
+   sli/northbound/index.rst
+   sli/plugins/index.rst
+   release-notes.rst
 
diff --git a/docs/parent/index.rst b/docs/parent/index.rst
new file mode 100644
index 0000000..833e1aa
--- /dev/null
+++ b/docs/parent/index.rst
@@ -0,0 +1,8 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+TODO Add files to toctree and delete this header
+------------------------------------------------
+.. toctree::
+   :maxdepth: 1
+
+
diff --git a/docs/platform/plugins/dmaap.rst b/docs/platform/plugins/dmaap.rst
new file mode 100644
index 0000000..b49eb4f
--- /dev/null
+++ b/docs/platform/plugins/dmaap.rst
@@ -0,0 +1,439 @@
+Cloudify DMaaP Plugin
+---------------------
+
+Cloudify plugin for creating and managing DMaaP Data Router feeds and
+subscriptions and DMaaP Message Router topics. The plugin uses the DMaaP
+Bus Controller API.
+
+Plugin Support for DMaaP Data Router
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Plugin Types for DMaaP Data Router
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The Cloudify type definitions for DMaaP Data Router nodes and
+relationships are defined in ```dmaap.yaml`` <./dmaap.yaml>`__.
+
+There are four node types for DMaaP Data Router:
+
+-  ``ccsdk.nodes.Feed``: This type represents a feed that does not yet
+   exist and that should be created when the install workflow is run
+   against a blueprint that contains a node of this type.
+
++------------------------+----------+-------------+---------------------------------------------------------------------------------------------+
+| Property               | Type     | Required?   | Description                                                                                 |
++========================+==========+=============+=============================================================================================+
+| feed\_name             | string   | no          | a name that identifies the feed (plugin will generate if absent)                            |
++------------------------+----------+-------------+---------------------------------------------------------------------------------------------+
+| feed\_version          | string   | no          | version number for the feed (feed\_name + feed\_version uniquely identify the feed in DR)   |
++------------------------+----------+-------------+---------------------------------------------------------------------------------------------+
+| feed\_description      | string   | no          | human-readable description of the feed                                                      |
++------------------------+----------+-------------+---------------------------------------------------------------------------------------------+
+| aspr\_classification   | string   | no          | AT&T ASPR classification of the feed                                                        |
++------------------------+----------+-------------+---------------------------------------------------------------------------------------------+
+
+-  ``ccsdk.nodes.ExistingFeed``: This type represents a feed that
+   already exists. Nodes of this type are placed in a blueprint so that
+   other nodes in the blueprint can be set up as publishers or
+   subscribers to the feed. The table below shows the properties that a
+   node of this type may have.
+
++------------+----------+-------------+---------------------------------------------------------------+
+| Property   | Type     | Required?   | Description                                                   |
++============+==========+=============+===============================================================+
+| feed\_id   | string   | yes         | Feed identifier assigned by DMaaP when the feed was created   |
++------------+----------+-------------+---------------------------------------------------------------+
+
+-  ``ccsdk.nodes.ExternalTargetFeed``: This type represents a feed
+   created in an external DMaaP environment (i.e., an environment that
+   the plugin cannot access to make provisioning requests, such as a
+   shared corporate system). Nodes of this type are placed in a
+   blueprint so that other feed nodes of type ``ccsdk.nodes.Feed`` or
+   ``ccsdk.nodes.ExistingFeed`` can be set up to "bridge" to external
+   feeds by publishing data to the external feeds. The table below shows
+   the properties that a node of this type may have.
+
++------------+----------+-------------+----------------------------------------------------------------+
+| Property   | Type     | Required?   | Description                                                    |
++============+==========+=============+================================================================+
+| url        | string   | yes         | The publish URL of the external feed.                          |
++------------+----------+-------------+----------------------------------------------------------------+
+| username   | string   | yes         | The username to be used when delivering to the external feed   |
++------------+----------+-------------+----------------------------------------------------------------+
+| userpw     | string   | yes         | The password to be used when delivering to the external feed   |
++------------+----------+-------------+----------------------------------------------------------------+
+
+*Note: These properties are usually obtained by manually creating a feed
+in the external DMaaP DR system and then creating a publisher for that
+feed.*
+
+-  ``ccsdk.nodes.ExternalSourceFeed``: This type represents a feed
+   created in an external DMaaP environment (i.e., an environment that
+   the plugin cannot access to makes provisioning requests, such as a
+   shared corporate system). Nodes of this type are place in a blueprint
+   so that they can be set up to "bridge" to other feed nodes of type
+   ``ccsdk.nodes.Feed`` or ``ccsdk.nodes.ExistingFeed``. This type has
+   no node properties, but when a bridge is set up, the url, username,
+   and password are attached to the node as runtime\_properties, using
+   the name of the target feed node as the top-level key.
+
+There are five relationship types for DMaaP Data Router:
+
+-  ``ccsdk.relationships.publish_files``, used to indicate that the
+   relationship's source node sends is a publisher to the Data Router
+   feed represented by the relationship's target node.
+-  ``ccsdk.relationships.subscribe_to_files``, used to indicate that the
+   relationship's source node is a subscriber to the Data Router feed
+   represented by the relationship's target node.
+-  ``ccsdk.relationships.bridges_to``, used to indicate that the
+   relationship's source node (a ``ccsdk.nodes.Feed`` or
+   ``ccsdk.nodes.ExistingFeed``) should be set up to forward data
+   ("bridge") to the relationship's target feed (another
+   ``ccsdk.nodes.Feed`` or ``ccsdk.nodes.ExistingFeed``).
+-  ``ccsdk.relationships.bridges_to_external``, used to indicate that
+   the relationship's source node (a ``ccsdk.nodes.Feed`` or
+   ``ccsdk.nodes.ExistingFeed``) should be set up to forward data
+   ("bridge") to the relationship's target node (a feed in an external
+   DMaaP system, represented by a ``ccsdk.nodes.ExternalTargetFeed``
+   node).
+-  ``ccsdk.relationships.bridges_from_external_to_internal``, used to
+   indicate the the relationship's source node (a feed in an external
+   DMaaP system, represented by a ``ccsdk.nodes.ExternalSourceFeed``
+   node) should be set up to forward date ("bridge") to the
+   relationship's target node (an internal ONAP feed, represented by a
+   ``ccsdk.nodes.Feed`` or ``ccsdk.nodes.ExistingFeed`` node).
+
+The plugin code implements the lifecycle operations needed to create and
+delete feeds and to add and remove publishers and subscribers. It also
+implements the operations needed to set up bridging between feeds.
+
+Interaction with Other Plugins
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+When creating a new feed or processing a reference to an existing feed,
+the plugin operates independently of other plugins.
+
+When processing a ``ccsdk.relationships.publish_files`` relationship or
+a ``ccsdk.relationships.subscribe_to_files`` relationship, this plugin
+needs to obtain data from the source node and, in the case of
+``publish_files``, provide data to the source node. Certain conventions
+are therefore needed for passing data between this plugin and the
+plugins responsible for the source nodes in these relationships. In
+Cloudify, the mechanism for sharing data among plugins is the
+``ctx.instance.runtime_properties`` dictionary associated with each
+node.
+
+A given source node may have relationships with several feeds. For
+example, an ONAP DCAE data collector might publish two different types
+of data to two different feeds. An ONAP DCAE analytics module might
+subscribe to one feed to get input for its processing and publish its
+results to a different feed. When this DMaaP plugin and the plugin for
+the source node exchange information, they need to do in a way that lets
+them distinguish among different feeds. We do this through a simple
+convention: for each source node to feed relationship, the source node
+plugin will create a property in the source node's
+``runtime_properties`` dictionary. The name of the property will be the
+same as the name of the target node of the relationship. For instance,
+if a node has a ``publishes_files`` relationship with a target node
+named ``feed00``, then the plugin that's responsible for managing the
+source node with create an entry in the source node's
+``runtime_properties`` dictionary named ``feed00``. This entry itself
+will be a dictionary.
+
+The content of this data exchange dictionary depends on whether the
+source node is a publisher (i.e., the relationship is ``publish_files``)
+or a subscriber (i.e., the relationship is ``subscribe_to_files``).
+
+For the ``publish_files`` relationship, the data exchange dictionary has
+the following properties:
+
++----------------+----------------------+--------------------------------------------------------------------------------------------------+
+| Property       | Set by               | Description                                                                                      |
++================+======================+==================================================================================================+
+| location       | source node plugin   | the DMaaP location for the publisher, used to set up routing                                     |
++----------------+----------------------+--------------------------------------------------------------------------------------------------+
+| publish\_url   | DMaaP plugin         | the URL to which the publisher makes Data Router publish requests                                |
++----------------+----------------------+--------------------------------------------------------------------------------------------------+
+| log\_url       | DMaaP plugin         | the URL from which log data for the feed can be obtained                                         |
++----------------+----------------------+--------------------------------------------------------------------------------------------------+
+| username       | DMaaP plugin         | the username (generated by the DMaaP plugin) the publisher uses to authenticate to Data Router   |
++----------------+----------------------+--------------------------------------------------------------------------------------------------+
+| password       | DMaaP plugin         | the password (generated by the DMaaP plugin) the publisher uses to authenticate to Data Router   |
++----------------+----------------------+--------------------------------------------------------------------------------------------------+
+
+For the ``subscribe_to_files`` relationship, the data exchange
+dictionary has the following properties:
+
++-----------------+----------------------+-----------------------------------------------------------------------------------------+
+| Property        | Set by               | Description                                                                             |
++=================+======================+=========================================================================================+
+| location        | source node plugin   | the DMaaP location for the subscriber, used to set up routing                           |
++-----------------+----------------------+-----------------------------------------------------------------------------------------+
+| delivery\_url   | source node plugin   | the URL to which the Data Router should deliver files                                   |
++-----------------+----------------------+-----------------------------------------------------------------------------------------+
+| username        | source node plugin   | the username Data Router uses to authenticate to the subscriber when delivering files   |
++-----------------+----------------------+-----------------------------------------------------------------------------------------+
+| password        | source node plugin   | the username Data Router uses to authenticate to the subscriber when delivering file    |
++-----------------+----------------------+-----------------------------------------------------------------------------------------+
+
+Plugin Support for DMaaP Message Router
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Plugin Types for DMaaP Message Router
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The Cloudify type definitions for DMaaP Message Router nodes and
+relationships are defined in ```dmaap.yaml`` <./dmaap.yaml>`__.
+
+There are two node types for DMaaP Message Router:
+
+-  ``ccsdk.nodes.Topic``: This type represents a topic that does not yet
+   exist and that should be created when the install workflow is run
+   against a blueprint that contains a node of this type.
+
++----------------------+-----------+-------------+-----------------------------------------------------------------------------+
+| Property             | Type      | Required?   | Description                                                                 |
++======================+===========+=============+=============================================================================+
+| topic\_name          | string    | no          | a name that uniquely identifies the feed (plugin will generate if absent)   |
++----------------------+-----------+-------------+-----------------------------------------------------------------------------+
+| topic\_description   | string    | no          | human-readable description of the feed                                      |
++----------------------+-----------+-------------+-----------------------------------------------------------------------------+
+| txenable             | boolean   | no          | flag indicating whether transactions are enabled for this topic             |
++----------------------+-----------+-------------+-----------------------------------------------------------------------------+
+| replication\_case    | string    | no          | type of replication required for the topic (defaults to no replication)     |
++----------------------+-----------+-------------+-----------------------------------------------------------------------------+
+| global\_mr\_url      | string    | no          | Global MR host name for replication to a global MR instance                 |
++----------------------+-----------+-------------+-----------------------------------------------------------------------------+
+
+Note: In order to set up topics, a user should be familiar with message
+router and how it is configured, and this README is not the place to
+explain the details of message router. Here are a couple of pieces of
+information that might be helpful. Currently, the allowed values for
+``replication_case`` are:
+
+-  ``REPLICATION_NONE``
+-  ``REPLICATION_EDGE_TO_CENTRAL``
+-  ``REPLICATION_EDGE_TO_CENTRAL_TO_GLOBAL``
+-  ``REPLICATION_CENTRAL_TO_EDGE``
+-  ``REPLICATION_CENTRAL_TO_GLOBAL``
+-  ``REPLICATION_GLOBAL_TO_CENTRAL``
+-  ``REPLICATION_GLOBAL_TO_CENTRAL_TO_EDGE``
+
+The ``global_mr_url`` is actually a host name, not a full URL. It points
+to a host in a global message router cluster. (A 'global' message router
+cluster is one that's not part of ONAP.)
+
+-  ``ccsdk.nodes.ExistingTopic``: This type represents a topic that
+   already exists. Nodes of this type are placed in a blueprint so that
+   other nodes in the blueprint can be set up as publishers or
+   subscribers to the topic. The table below shows the properties that a
+   node of this type may have.
+
++------------+----------+-------------+--------------------------------------------+
+| Property   | Type     | Required?   | Description                                |
++============+==========+=============+============================================+
+| fqtn       | string   | yes         | fully-qualified topic name for the topic   |
++------------+----------+-------------+--------------------------------------------+
+
+Interaction with Other Plugins
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+When creating a new topic or processing a reference to an existing
+topic, the plugin operates independently of other plugins.
+
+When processing a ``ccsdk.relationships.publish_events`` relationship or
+a ``ccsdk.relationships.subscribe_to_events`` relationship, this plugin
+needs to obtain data from and provide data to the source node. Certain
+conventions are therefore needed for passing data between this plugin
+and the plugins responsible for the source nodes in these relationships.
+In Cloudify, the mechanism for sharing data among plugins is the
+``ctx.instance.runtime_properties`` dictionary associated with each
+node.
+
+A given source node may have relationships with several topics. For
+example, an ONAP DCAE analytics module might subscribe to one topic to
+get input for its processing and publish its results to a different
+topic. When this DMaaP plugin and the plugin for the source node
+exchange information, they need to do in a way that lets them
+distinguish among different feeds. We do this through a simple
+convention: for each source node to topic relationship, the source node
+plugin will create a property in the source node's
+``runtime_properties`` dictionary. The name of the property will be the
+same as the name of the target node of the relationship. For instance,
+if a node has a ``publishes_events`` relationship with a target node
+named ``topic00``, then the plugin that's responsible for managing the
+source node with create an entry in the source node's
+``runtime_properties`` dictionary named ``topic00``. This entry itself
+will be a dictionary.
+
+For both types of relationship, the data exchange dictionary has the
+following properties:
+
++----------------+----------------------+----------------------------------------------------------------------------------+
+| Property       | Set by               | Description                                                                      |
++================+======================+==================================================================================+
+| location       | source node plugin   | the DMaaP location for the publisher or subscriber, used to set up routing       |
++----------------+----------------------+----------------------------------------------------------------------------------+
+| client\_role   | source node plugin   | the AAF client role that's requesting publish or subscribe access to the topic   |
++----------------+----------------------+----------------------------------------------------------------------------------+
+| topic\_url     | DMaaP plugin         | the URL for accessing the topic to publish or receive events                     |
++----------------+----------------------+----------------------------------------------------------------------------------+
+
+Interaction with Consul configuration store
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+In addition to storing the results of DMaaP Data Router and DMaaP
+Message Router provisioning operations in ``runtime_properties``, the
+DMaaP plugin also stores these results into the ONAP configuration
+store, which resides in a `Consul key-value
+store <https://www.consul.io/>`__. This allows DMaaP clients (components
+that act as publishers, subscribers, or both) to retrieve their DMaaP
+configuration information from Consul, rather than having the plugin
+that deploys the client directly configure the client using data in
+``runtime_properties``.
+
+The ``runtime_properties`` for a client must contain a property called
+``service_component_name``. If this property is not present, the plugin
+will raise a NonRecoverableError and cause the installation to fail.
+
+If ``service_component_name`` is present, then the plugin will use a
+Consul key consisting of the value of ``service_component_name``
+prepended to the fixed string ``:dmaap``. For example, if the
+``service_component_name`` is ``client123``, the plugin will use
+``client123:dmaap`` as the key for storing DMaaP information into
+Consul. Information for all of the feeds and topics for a client are
+stored under the same key.
+
+The value stored is a nested JSON object. At the top level of the object
+are properties representing each topic or feed for which the component
+is a publisher or subscriber. The name of the property is the node name
+of the target feed or topic. The value of the property is another JSON
+object that corresponds to the dictionary that the plugin created in
+``runtime_properties`` corresponding to the target feed or topic. Note
+that the information in Consul includes all of the properties for the
+feed or topic, those set by the source node plugin as well as those set
+by the DMaaP plugin.
+
+Examples:
+
+Data Router publisher, target feed ``feed00``:
+
+::
+
+    {
+      "feed00": {
+        "username": "rC9QR51I",
+        "log_url": "https://dmaap.example.com/feedlog/972",
+        "publish_url": "https://dmaap.example.com/publish/972",
+        "location": "loc00",
+        "password": "QOQeUh5KLR",
+        "publisher_id": "972.360gm"
+      }
+    }
+
+Data Router subscriber, target feed ``feed01``:
+
+::
+
+    {
+      "feed01": {
+        "username": "drdeliver",
+        "password": "1loveDataR0uter",
+        "location": "loc00",
+        "delivery_url": "https://example.com/whatever",
+        "subscriber_id": "1550"
+      }
+    }
+
+Message Router publisher to ``topic00``, subscriber to ``topic01``. Note
+how each topic appears as a top-level property in the object.
+
+::
+
+    {
+      "topic00": {
+        "topic_url": "https://dmaap.example.com:3905/events/org.onap.ccsdk.dmaap.FTL2.outboundx",
+        "client_role": "org.onap.ccsdk.member",
+        "location": "loc00",
+        "client_id": "1494621774522"
+      },
+      "topic01": {
+        "topic_url": "https://dmaap.example.com:3905/events/org.onap.ccsdk.dmaap.FTL2.inboundx",
+        "client_role": "org.onap.ccsdk.member",
+        "location": "loc00",
+        "client_id": "1494621778627"
+      }
+    }
+
+Packaging and installing
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+The DMaaP plugin is meant to be used as a `Cloudify managed
+plugin <http://docs.getcloudify.org/3.4.0/plugins/using-plugins/>`__.
+Managed plugins are packaged using
+```wagon`` <https://github.com/cloudify-cosmo/wagon>`__.
+
+To package this plugin, executing the following command in the top-level
+directory of this plugin, from a Python environment in which ``wagon``
+has been installed:
+
+::
+
+    wagon create -s . -r -o /path/to/directory/for/wagon/output
+
+Once the wagon file is built, it can be uploaded to a Cloudify Manager
+host using the ``cfy plugins upload`` command described in the
+documentation above.
+
+Managed plugins can also be loaded at the time a Cloudify Manager host
+is installed, via the installation blueprint and inputs file. We expect
+that this plugin will be loaded at Cloudify Manager installation time,
+and that ``cfy plugins upload`` will be used only for delivering patches
+between releases.
+
+Configuration
+~~~~~~~~~~~~~
+
+The plugin needs to be configured with certain parameters needed to
+access the DMaaP Bus Controller. In keeping with the ONAP architecture,
+this information is stored in Consul.
+
+The plugin finds the address and port of the DMaaP Bus Controller using
+the Consul service discovery facility. The plugin expects the Bus
+Controller to be registered under the name ``dmaap_bus_controller``.
+
+Additional parameters come from the ``dmaap`` key in the Cloudify
+Manager's Consul configuration, which is stored in the Consul KV store
+under the key name 'cloudify\_manager'. The table below lists the
+properties in the configuration:
+
++----------------+----------+-------------+--------------+---------------------------------------------------------------------------------------------+
+| Property       | Type     | Required?   | Default      | Description                                                                                 |
++================+==========+=============+==============+=============================================================================================+
+| ``username``   | string   | Yes         | (none)       | The username for logging into DMaaP Bus Controller                                          |
++----------------+----------+-------------+--------------+---------------------------------------------------------------------------------------------+
+| ``password``   | string   | Yes         | (none)       | The password for logging into DMaaP Bus Controller                                          |
++----------------+----------+-------------+--------------+---------------------------------------------------------------------------------------------+
+| ``owner``      | string   | Yes         | (none)       | The name to be used as the owner for entities created by the plugin                         |
++----------------+----------+-------------+--------------+---------------------------------------------------------------------------------------------+
+| ``protocol``   | string   | No          | ``https``    | The protocol (URL scheme) used to access the DMaaP bus controller (``http`` or ``https``)   |
++----------------+----------+-------------+--------------+---------------------------------------------------------------------------------------------+
+| ``path``       | string   | No          | ``webapi``   | The path to the root of the DMaaP Bus Controller API endpoint                               |
++----------------+----------+-------------+--------------+---------------------------------------------------------------------------------------------+
+
+Here is an example of a Cloudify Manager configuration object showing
+only the ``dmaap`` key:
+
+::
+
+    {
+      "dmaap": {
+        "username": "dmaap.client@ccsdkorch.onap.org",
+        "password": "guessmeifyoucan"
+        "owner": "ccsdkorc"
+      },
+
+      (other configuration here)
+
+    }
+
diff --git a/docs/platform/plugins/dnsdesig.rst b/docs/platform/plugins/dnsdesig.rst
new file mode 100644
index 0000000..de67aef
--- /dev/null
+++ b/docs/platform/plugins/dnsdesig.rst
@@ -0,0 +1,103 @@
+.. raw:: html
+
+   <!--
+   ============LICENSE_START=======================================================
+   org.onap.ccsdk
+   ================================================================================
+   Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+   ================================================================================
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   ============LICENSE_END=========================================================
+   -->
+
+DNS/Designate Plugin
+====================
+
+Cloudify DNS/Designate plugin description # Description The
+DNS/Designate plugin extends the concepts of the Cloudify OpenStack
+plugin to include using the DNS/Designate service, to set up and tear
+down DNS "A" and "CNAME" records, as part of a Cloudify blueprint. #
+Plugin Requirements \* Python versions \* 2.7.x
+
+Note: These requirements apply to the VM where Cloudify Manager itself
+runs.
+
+Note: Cloudify Manager, itself, requires Python 2.7.x (and CentOS 7).
+
+Types
+=====
+
+ccsdk.nodes.dns.arecord
+-----------------------
+
+**Derived From:** cloudify.nodes.Root
+
+**Properties:**
+
+-  ``fqdn`` (required string) The FQDN for the set of DNS A records to
+   be managed. The DNS zone to which this FQDN belongs is assumed to be
+   the entire FQDN following the first dot. This value must not end with
+   a dot. The provided openstack credentials must allow updating records
+   in the DNS zone.
+-  ``ttl`` (optional integer default=300) The time to live, in seconds,
+   of the DNS entries.
+-  ``openstack`` (required map) The set of configuration parameters to
+   use for accessing the OpenStack DNS service: username, password,
+   tenant\_name, auth\_url, and region.
+
+**Mapped Operations:**
+
+-  ``cloudify.interfaces.lifecycle.create`` Creates or updates the type
+   "A" recordset for the specified FQDN. \*\* ``Inputs:`` \*\*\*
+   ``args`` Key-value configuration \*\*\*\* ``ip_addresses`` (required
+   sequence of string) A non-empty list of IP addresses corresponding to
+   the FQDN
+-  ``cloudify.interfaces.lifecycle.delete`` Deletes the type "A"
+   recordset, if any, for the specified FQDN.
+
+**Attributes:** This type has no runtime attributes
+
+ccsdk.nodes.dns.cnamerecord
+---------------------------
+
+**Derived From:** cloudify.nodes.Root
+
+**Properties:**
+
+-  ``fqdn`` (required string) The FQDN for the DNS CNAME record to be
+   managed. The DNS zone to which this FQDN belongs is assumed to be the
+   entire FQDN following the first dot. This value must not end with a
+   dot. The provided openstack credentials must allow updating records
+   in the DNS zone.
+-  ``ttl`` (optional integer default=300) The time to live, in seconds,
+   of the DNS entry.
+-  ``openstack`` (required map) The set of configuration parameters to
+   use for accessing the OpenStack DNS service: username, password,
+   tenant\_name, auth\_url, and region.
+
+**Mapped Operations:**
+
+-  ``cloudify.interfaces.lifecycle.create`` Creates or updates the type
+   "CNAME" recordset for the specified FQDN. \*\* ``Inputs:`` \*\*\*
+   ``args`` Key-value configuration \*\*\*\* ``cname`` (required string)
+   The FQDN that this CNAME record should point to. This value must not
+   end with at dot.
+-  ``cloudify.interfaces.lifecycle.delete`` Deletes the type "CNAME"
+   recordset, if any, for the specified FQDN.
+
+**Attributes:** This type has no runtime attributes
+
+Relationships
+=============
+
+This plugin does not define or use any relationships
diff --git a/docs/platform/plugins/index.rst b/docs/platform/plugins/index.rst
new file mode 100644
index 0000000..3597838
--- /dev/null
+++ b/docs/platform/plugins/index.rst
@@ -0,0 +1,9 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+.. toctree::
+   :maxdepth: 1
+
+   dmaap.rst
+   dnsdesig.rst
+   pgaas.rst
+   sshkeyshare.rst
diff --git a/docs/platform/plugins/pgaas.rst b/docs/platform/plugins/pgaas.rst
new file mode 100644
index 0000000..d27436f
--- /dev/null
+++ b/docs/platform/plugins/pgaas.rst
@@ -0,0 +1,130 @@
+PGaaS Plugin
+============
+
+Cloudify PGaaS plugin description and configuraiton # Description The
+PGaaS plugin allows users to deploy PostgreSQL application databases,
+and retrieve access credentials for such databases, as part of a
+Cloudify blueprint. # Plugin Requirements \* Python versions \* 2.7.x \*
+System dependencies \* psycopg2
+
+Note: These requirements apply to the VM where Cloudify Manager itself
+runs.
+
+Note: The psycopg2 requirement is met by running "yum install
+python-psycopg2" on the Cloudify Manager VM.
+
+Note: Cloudify Manager, itself, requires Python 2.7.x (and Centos 7).
+
+Types
+=====
+
+dcae.nodes.pgaas.cluster
+------------------------
+
+**Derived From:** cloudify.nodes.Root
+
+**Properties:**
+
+-  ``writerfqdn`` (required string) The FQDN used for read-write access
+   to the cluster containing the postgres database instance. This is
+   used to identify and access a particular database instance and to
+   record information about that instance on Cloudify Manager.
+-  ``use_existing`` (optional boolean default=false) This is used to
+   reference a database instance, in one blueprint, that was deployed in
+   a different one. If it is ``true``, then the ``readerfqdn`` property
+   must not be set and this node must not have any
+   ``dcae.relationships.pgaas_cluster_uses_sshkeypair`` relationships.
+   If it is ``false``, then this node must have exactly one
+   ``dcae.relationships.pgaas_cluster_uses_sshkeypair`` relationship.
+-  ``readerfqdn`` (optional string default=value of ``writerfqdn``) The
+   FQDN used for read-only access to the cluster containing the postgres
+   database instance, if different than the FQDN used for read-write
+   access. This will be used by viewer roles.
+
+**Mapped Operations:**
+
+-  ``cloudify.interfaces.lifecycle.create`` validates and records
+   information about the cluster on the Cloudify Manager server in
+   /opt/manager/resources/pgaas/``writerfqdn``.
+-  ``cloudify.interfaces.lifecycle.delete`` deletes previously recorded
+   information from the Cloudify Manager server.
+
+Note: When ``use_existing`` is ``true``, the create operation validates
+but does not record, and delete does nothing. Delete also does nothing
+when validation has failed.
+
+**Attributes:** This type has no runtime attributes
+
+dcae.nodes.pgaas.database
+-------------------------
+
+**Derived From:** cloudify.nodes.Root
+
+**Properties:** \* ``name`` (required string) The name of the
+application database, in postgres. This name is also used to create the
+names of the roles used to access the database, and the schema made
+available to users of the database. \* ``use_existing`` (optional
+boolean default=false) This is used to reference an application
+database, in one blueprint, that was deployed in a different one. If
+true, and this node has a
+dcae.relationships.database\_runson\_pgaas\_cluster relationship, the
+dcae.nodes.pgaas.cluster node that is the target of that relationship
+must also have it's ``use_existing`` property set to true. \*
+``writerfqdn`` (optional string) This can be used as an alternative to
+specifying the cluster, for the application database, with a
+dcae.relationships.database\_runson\_pgaas\_cluster relationship to a
+dcae.nodes.pgaas.cluster node. Exactly one of the two options must be
+used. The relationship method must be used if this blueprint is
+deploying both the cluster and the application database on the cluster.
+
+**Mapped Operations:**
+
+-  ``cloudify.interfaces.lifecycle.create`` creates the application
+   database, and various roles for admin/user/viewer access to it.
+-  ``cloudify.interfaces.lifecycle.delete`` deletes the application
+   database and roles
+
+Note: When ``use_existing`` is true, create and delete do not create or
+delete the application database or associated roles. Create still sets
+runtime attributes (see below).
+
+**Attributes:**
+
+-  ``admin`` a dict containing access information for adminstrative
+   access to the application database.
+-  ``user`` a dict containing access information for user access to the
+   application database.
+-  ``viewer`` a dict containing access information for read-only access
+   to the application database.
+
+The keys in the access information dicts are as follows:
+
+-  ``database`` the name of the application database.
+-  ``host`` the appropriate FQDN for accessing the application database,
+   (writerfqdn or readerfqdn, based on the type of access).
+-  ``user`` the user role for accessing the database.
+-  ``password`` the password corresponding to the user role.
+
+Relationships
+=============
+
+dcae.relationships.pgaas\_cluster\_uses\_sshkeypair
+---------------------------------------------------
+
+**Description:** A relationship for binding a dcae.nodes.pgaas.cluster
+node to the dcae.nodes.ssh.keypair used by the cluster to initialize the
+database access password for the postgres role. The password for the
+postgres role is expected to be the hex representation of the MD5 hash
+of 'postgres' and the contents of the id\_rsa (private key) file for the
+ssh keypair. A dcae.nodes.pgaas.cluster node must have such a
+relationship if and only if it's use\_existing property is false. ##
+dcae.relationships.dcae.relationships.database\_runson\_pgaas\_cluster
+**Description:** A relationship for binding a dcae.nodes.pgaas.database
+node to the dcae.nodes.pgaas.cluster node that contains the application
+database. A dcae.nodes.pgaas.database node must have either such a
+relationship or a writerfqdn property. The writerfqdn property cannot be
+used if the cluster is created in the same blueprint as the application
+database. ## dcae.relationships.application\_uses\_pgaas\_database
+**Description:** A relationship for binding a node that needs
+application database access information to the dcae.nodes.pgaas.database
+node for that application database.
diff --git a/docs/platform/plugins/sshkeyshare.rst b/docs/platform/plugins/sshkeyshare.rst
new file mode 100644
index 0000000..8b5a049
--- /dev/null
+++ b/docs/platform/plugins/sshkeyshare.rst
@@ -0,0 +1,61 @@
+.. raw:: html
+
+   <!--
+   ============LICENSE_START=======================================================
+   org.onap.ccsdk
+   ================================================================================
+   Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+   ================================================================================
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   ============LICENSE_END=========================================================
+   -->
+
+sshkeyshare plugin
+==================
+
+Cloudify plugin for creating ssh key pairs on the fly # Description The
+sshkeyshare Cloudify plugin creates an ssh key pair that can be used, by
+VMs or other containers spun up by a Cloudify blueprint, for
+establishing connections, among them. The blue print can, for example,
+provide the private key to one VM and the public one to another, as part
+of their initial configuration, to allow the one with the private key to
+automatically connect to the other one, to run commands. # Plugin
+Requirements \* Python versions \* 2.7.x
+
+Note: These requirements apply to the VM where Cloudify Manager itself
+runs.
+
+Note: Cloudify Manager, itself, requires Pythong 2.7.x (and CentOS 7).
+
+Types
+=====
+
+ccsdk.nodes.ssh.keypair
+-----------------------
+
+**Derived From:** cloudify.nodes.Root
+
+**Properties:** This type has no properties
+
+**Mapped Operations:** \* ``cloudify.interfaces.lifecycle.create``
+Creates a new ssh keypair using ssh-keygen
+
+**Attributes:** \* ``public`` A string containing the public key of the
+newly created keypair. \* ``base64private`` A single line base-64
+encoded representation of the content of the private key file for the
+newly created keypair.
+
+Relationships
+=============
+
+This plugin does not define or use any relationships
diff --git a/docs/release-notes.rst b/docs/release-notes.rst
new file mode 100644
index 0000000..94b4fc6
--- /dev/null
+++ b/docs/release-notes.rst
@@ -0,0 +1,45 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+Release Notes
+=============
+
+Version: 0.1.0
+--------------
+
+
+:Release Date: 2017-11-16
+
+
+
+**New Features**
+
+The Common Controller SDK provides the following functionality :
+   - Service Logic Interpreter
+   - Database access library (dblib)
+   - Service Logic test api (sliapi)
+   - MD-SAL data query adaptor
+   - SQL query adaptor
+   - Resource allocator
+   - SDC interface
+   - DMAAP interface
+   - REST API adaptor
+
+
+**Bug Fixes**
+
+**Known Issues**
+   - `CCSDK-110 <https://jira.onap.org/browse/CCSDK-110>`_ Resolve license issues in dashboard project
+   - `CCSDK-136 <https://jira.onap.org/browse/CCSDK-136>`_ pgaas is dependent on location_prefix being all lowercase
+   - `CCSDK-137 <https://jira.onap.org/browse/CCSDK-137>`_ isolate deprecated methods
+
+**Security Issues**
+   You may want to include a reference to CVE (Common Vulnerabilities and Exposures) `CVE <https://cve.mitre.org>`_
+
+
+**Upgrade Notes**
+
+**Deprecation Notes**
+
+**Other**
+
+===========
diff --git a/docs/sli/adaptors/architecture.rst b/docs/sli/adaptors/architecture.rst
new file mode 100644
index 0000000..8daa0d3
--- /dev/null
+++ b/docs/sli/adaptors/architecture.rst
@@ -0,0 +1,27 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Architecture
+============
+
+.. note::
+   * This section is used to describe a software component from a high level
+     view of capability, common usage scenarios, and interactions with other
+     components required in the usage scenarios.  
+   
+   * The architecture section is typically: provided in a platform-component
+     and sdk collections; and referenced from developer and user guides.
+   
+   * This note must be removed after content has been added.
+
+
+Capabilities
+------------
+
+
+Usage Scenarios
+---------------
+
+
+Interactions
+------------
diff --git a/docs/sli/adaptors/build.rst b/docs/sli/adaptors/build.rst
new file mode 100644
index 0000000..0a4c308
--- /dev/null
+++ b/docs/sli/adaptors/build.rst
@@ -0,0 +1,18 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Build
+=====
+
+
+Environment
+-----------
+Requires maven release 3.3 or greater
+
+Steps
+-----
+To compile this code:
+
+1. Make sure your local Maven settings file ($HOME/.m2/settings.xml) contains references to the ONAP repositories and OpenDaylight repositories.
+
+2. To compile, run "mvn clean install".
\ No newline at end of file
diff --git a/docs/sli/adaptors/docs/architecture.rst b/docs/sli/adaptors/docs/architecture.rst
new file mode 100644
index 0000000..8daa0d3
--- /dev/null
+++ b/docs/sli/adaptors/docs/architecture.rst
@@ -0,0 +1,27 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Architecture
+============
+
+.. note::
+   * This section is used to describe a software component from a high level
+     view of capability, common usage scenarios, and interactions with other
+     components required in the usage scenarios.  
+   
+   * The architecture section is typically: provided in a platform-component
+     and sdk collections; and referenced from developer and user guides.
+   
+   * This note must be removed after content has been added.
+
+
+Capabilities
+------------
+
+
+Usage Scenarios
+---------------
+
+
+Interactions
+------------
diff --git a/docs/sli/adaptors/docs/build.rst b/docs/sli/adaptors/docs/build.rst
new file mode 100644
index 0000000..0a4c308
--- /dev/null
+++ b/docs/sli/adaptors/docs/build.rst
@@ -0,0 +1,18 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Build
+=====
+
+
+Environment
+-----------
+Requires maven release 3.3 or greater
+
+Steps
+-----
+To compile this code:
+
+1. Make sure your local Maven settings file ($HOME/.m2/settings.xml) contains references to the ONAP repositories and OpenDaylight repositories.
+
+2. To compile, run "mvn clean install".
\ No newline at end of file
diff --git a/docs/sli/adaptors/docs/index.rst b/docs/sli/adaptors/docs/index.rst
new file mode 100644
index 0000000..3156c8a
--- /dev/null
+++ b/docs/sli/adaptors/docs/index.rst
@@ -0,0 +1,12 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+CCSDK Service Logic Interpretor Adaptors
+----------------------------------------
+.. toctree::
+   :maxdepth: 1
+
+   architecture.rst
+   offeredapis.rst
+   logging.rst
+   build.rst
+   release-notes.rst
diff --git a/docs/sli/adaptors/docs/logging.rst b/docs/sli/adaptors/docs/logging.rst
new file mode 100644
index 0000000..187eb03
--- /dev/null
+++ b/docs/sli/adaptors/docs/logging.rst
@@ -0,0 +1,14 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Logging
+=======
+CCSDK uses slf4j to log messages to the standard OpenDaylight karaf.log
+log file.
+
+Where to Access Information
+---------------------------
+Logs are found within the SDNC docker container, in the directory
+/opt/opendaylight/current/data/logs.
+
+
diff --git a/docs/sli/adaptors/docs/offeredapis.rst b/docs/sli/adaptors/docs/offeredapis.rst
new file mode 100644
index 0000000..e20c786
--- /dev/null
+++ b/docs/sli/adaptors/docs/offeredapis.rst
@@ -0,0 +1,6 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Offered APIs
+============
+
diff --git a/docs/sli/adaptors/docs/release-notes.rst b/docs/sli/adaptors/docs/release-notes.rst
new file mode 100644
index 0000000..b451657
--- /dev/null
+++ b/docs/sli/adaptors/docs/release-notes.rst
@@ -0,0 +1,46 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+Release Notes
+=============
+
+.. note::
+   * This Release Notes must be updated each time the team decides to Release new artifacts.
+   * The scope of this Release Notes is for this particular component. In other words, each ONAP component has its Release Notes.
+   * This Release Notes is cumulative, the most recently Released artifact is made visible in the top of this Release Notes.
+   * Except the date and the version number, all the other sections are optional but there must be at least one section describing the purpose of this new release.
+   * This note must be removed after content has been added.
+
+
+Version: x.y.z
+--------------
+
+
+:Release Date: yyyy-mm-dd
+
+
+
+**New Features**
+
+One or two sentences explaining the purpose of this Release.
+
+**Bug Fixes**
+   - `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and a sentence explaining what this defect is addressing.
+**Known Issues**
+   - `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and two, three sentences.
+     One sentences explaining what is the issue.
+
+     Another sentence explaining the impact of the issue.
+
+     And an optional sentence providing a workaround.
+
+**Security Issues**
+   You may want to include a reference to CVE (Common Vulnerabilities and Exposures) `CVE <https://cve.mitre.org>`_
+
+
+**Upgrade Notes**
+
+**Deprecation Notes**
+
+**Other**
+
+===========
\ No newline at end of file
diff --git a/docs/sli/adaptors/index.rst b/docs/sli/adaptors/index.rst
new file mode 100644
index 0000000..3156c8a
--- /dev/null
+++ b/docs/sli/adaptors/index.rst
@@ -0,0 +1,12 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+CCSDK Service Logic Interpretor Adaptors
+----------------------------------------
+.. toctree::
+   :maxdepth: 1
+
+   architecture.rst
+   offeredapis.rst
+   logging.rst
+   build.rst
+   release-notes.rst
diff --git a/docs/sli/adaptors/logging.rst b/docs/sli/adaptors/logging.rst
new file mode 100644
index 0000000..187eb03
--- /dev/null
+++ b/docs/sli/adaptors/logging.rst
@@ -0,0 +1,14 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Logging
+=======
+CCSDK uses slf4j to log messages to the standard OpenDaylight karaf.log
+log file.
+
+Where to Access Information
+---------------------------
+Logs are found within the SDNC docker container, in the directory
+/opt/opendaylight/current/data/logs.
+
+
diff --git a/docs/sli/adaptors/offeredapis.rst b/docs/sli/adaptors/offeredapis.rst
new file mode 100644
index 0000000..e20c786
--- /dev/null
+++ b/docs/sli/adaptors/offeredapis.rst
@@ -0,0 +1,6 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Offered APIs
+============
+
diff --git a/docs/sli/adaptors/release-notes.rst b/docs/sli/adaptors/release-notes.rst
new file mode 100644
index 0000000..b451657
--- /dev/null
+++ b/docs/sli/adaptors/release-notes.rst
@@ -0,0 +1,46 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+Release Notes
+=============
+
+.. note::
+   * This Release Notes must be updated each time the team decides to Release new artifacts.
+   * The scope of this Release Notes is for this particular component. In other words, each ONAP component has its Release Notes.
+   * This Release Notes is cumulative, the most recently Released artifact is made visible in the top of this Release Notes.
+   * Except the date and the version number, all the other sections are optional but there must be at least one section describing the purpose of this new release.
+   * This note must be removed after content has been added.
+
+
+Version: x.y.z
+--------------
+
+
+:Release Date: yyyy-mm-dd
+
+
+
+**New Features**
+
+One or two sentences explaining the purpose of this Release.
+
+**Bug Fixes**
+   - `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and a sentence explaining what this defect is addressing.
+**Known Issues**
+   - `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and two, three sentences.
+     One sentences explaining what is the issue.
+
+     Another sentence explaining the impact of the issue.
+
+     And an optional sentence providing a workaround.
+
+**Security Issues**
+   You may want to include a reference to CVE (Common Vulnerabilities and Exposures) `CVE <https://cve.mitre.org>`_
+
+
+**Upgrade Notes**
+
+**Deprecation Notes**
+
+**Other**
+
+===========
\ No newline at end of file
diff --git a/docs/sli/core/docs/apis/sliapi.rst b/docs/sli/core/docs/apis/sliapi.rst
new file mode 100644
index 0000000..13cdcbd
--- /dev/null
+++ b/docs/sli/core/docs/apis/sliapi.rst
@@ -0,0 +1,15 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+SLI-API(2016-11-11)
+===================
+
+.. toctree::
+   :maxdepth: 1
+   :titlesonly:
+
+
+
+.. swaggerv2doc:: https://gerrit.onap.org/r/gitweb?p=ccsdk/sli/core.git;a=blob_plain;f=sliapi/model/src/main/resources/sli-api.20161110.json
+
+
diff --git a/docs/sli/core/docs/architecture.rst b/docs/sli/core/docs/architecture.rst
new file mode 100644
index 0000000..f6101a1
--- /dev/null
+++ b/docs/sli/core/docs/architecture.rst
@@ -0,0 +1,20 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Architecture
+============
+
+
+
+Capabilities
+------------
+Provides the core Service Logic Interpreter (SLI) functionality, used to execute directed graphs (DGs).  Directed graphs allow service designers to define the
+logic to be executed within the SDN controller in a graphical format which can be
+updated in real time, without a need to restart the controller.
+
+.. toctree::
+   :maxdepth: 1
+
+   nodes.rst
+
+
diff --git a/docs/sli/core/docs/build.rst b/docs/sli/core/docs/build.rst
new file mode 100644
index 0000000..0a4c308
--- /dev/null
+++ b/docs/sli/core/docs/build.rst
@@ -0,0 +1,18 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Build
+=====
+
+
+Environment
+-----------
+Requires maven release 3.3 or greater
+
+Steps
+-----
+To compile this code:
+
+1. Make sure your local Maven settings file ($HOME/.m2/settings.xml) contains references to the ONAP repositories and OpenDaylight repositories.
+
+2. To compile, run "mvn clean install".
\ No newline at end of file
diff --git a/docs/sli/core/docs/index.rst b/docs/sli/core/docs/index.rst
new file mode 100644
index 0000000..2055f17
--- /dev/null
+++ b/docs/sli/core/docs/index.rst
@@ -0,0 +1,13 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+CCSDK Service Logic Interpreter
+-------------------------------
+.. toctree::
+   :maxdepth: 1
+
+   architecture.rst
+   offeredapis.rst
+   logging.rst
+   build.rst
+   release-notes.rst
+
diff --git a/docs/sli/core/docs/logging.rst b/docs/sli/core/docs/logging.rst
new file mode 100644
index 0000000..187eb03
--- /dev/null
+++ b/docs/sli/core/docs/logging.rst
@@ -0,0 +1,14 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Logging
+=======
+CCSDK uses slf4j to log messages to the standard OpenDaylight karaf.log
+log file.
+
+Where to Access Information
+---------------------------
+Logs are found within the SDNC docker container, in the directory
+/opt/opendaylight/current/data/logs.
+
+
diff --git a/docs/sli/core/docs/nodes.rst b/docs/sli/core/docs/nodes.rst
new file mode 100644
index 0000000..3bdeabc
--- /dev/null
+++ b/docs/sli/core/docs/nodes.rst
@@ -0,0 +1,1031 @@
+--- 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
+^^^^^^^
+
+::
+
+    <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>
diff --git a/docs/sli/core/docs/offeredapis.rst b/docs/sli/core/docs/offeredapis.rst
new file mode 100644
index 0000000..42eafdd
--- /dev/null
+++ b/docs/sli/core/docs/offeredapis.rst
@@ -0,0 +1,12 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Offered APIs
+============
+
+.. toctree::
+   :maxdepth: 1
+   :titlesonly:
+
+   apis/sliapi.rst
+
diff --git a/docs/sli/core/docs/release-notes.rst b/docs/sli/core/docs/release-notes.rst
new file mode 100644
index 0000000..b451657
--- /dev/null
+++ b/docs/sli/core/docs/release-notes.rst
@@ -0,0 +1,46 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+Release Notes
+=============
+
+.. note::
+   * This Release Notes must be updated each time the team decides to Release new artifacts.
+   * The scope of this Release Notes is for this particular component. In other words, each ONAP component has its Release Notes.
+   * This Release Notes is cumulative, the most recently Released artifact is made visible in the top of this Release Notes.
+   * Except the date and the version number, all the other sections are optional but there must be at least one section describing the purpose of this new release.
+   * This note must be removed after content has been added.
+
+
+Version: x.y.z
+--------------
+
+
+:Release Date: yyyy-mm-dd
+
+
+
+**New Features**
+
+One or two sentences explaining the purpose of this Release.
+
+**Bug Fixes**
+   - `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and a sentence explaining what this defect is addressing.
+**Known Issues**
+   - `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and two, three sentences.
+     One sentences explaining what is the issue.
+
+     Another sentence explaining the impact of the issue.
+
+     And an optional sentence providing a workaround.
+
+**Security Issues**
+   You may want to include a reference to CVE (Common Vulnerabilities and Exposures) `CVE <https://cve.mitre.org>`_
+
+
+**Upgrade Notes**
+
+**Deprecation Notes**
+
+**Other**
+
+===========
\ No newline at end of file
diff --git a/docs/sli/northbound/apis/asdcApi.rst b/docs/sli/northbound/apis/asdcApi.rst
new file mode 100644
index 0000000..c909140
--- /dev/null
+++ b/docs/sli/northbound/apis/asdcApi.rst
@@ -0,0 +1,15 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+ASDC-API (2017-02-01)
+=====================
+
+.. toctree::
+   :maxdepth: 1
+   :titlesonly:
+
+
+
+.. swaggerv2doc:: https://gerrit.onap.org/r/gitweb?p=ccsdk/sli/northbound.git;a=blob_plain;f=asdcApi/model/src/main/resources/asdc-api.20170201.json
+
+
diff --git a/docs/sli/northbound/apis/dataChange.rst b/docs/sli/northbound/apis/dataChange.rst
new file mode 100644
index 0000000..9a9dc04
--- /dev/null
+++ b/docs/sli/northbound/apis/dataChange.rst
@@ -0,0 +1,15 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+dataChange(2015-05-19)
+======================
+
+.. toctree::
+   :maxdepth: 1
+   :titlesonly:
+
+
+
+.. swaggerv2doc:: https://gerrit.onap.org/r/gitweb?p=ccsdk/sli/northbound.git;a=blob_plain;f=dataChange/model/src/main/resources/dataChange.20150519.json
+
+
diff --git a/docs/sli/northbound/architecture.rst b/docs/sli/northbound/architecture.rst
new file mode 100644
index 0000000..f2648df
--- /dev/null
+++ b/docs/sli/northbound/architecture.rst
@@ -0,0 +1,12 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Architecture
+============
+
+
+Capabilities
+------------
+This repository contains source code and Yang models for the northbound interfaces
+used to process updates from SDC (ASDC-API) and for processing data change notifications
+from A&AI (dataChange).
diff --git a/docs/sli/northbound/build.rst b/docs/sli/northbound/build.rst
new file mode 100644
index 0000000..0a4c308
--- /dev/null
+++ b/docs/sli/northbound/build.rst
@@ -0,0 +1,18 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Build
+=====
+
+
+Environment
+-----------
+Requires maven release 3.3 or greater
+
+Steps
+-----
+To compile this code:
+
+1. Make sure your local Maven settings file ($HOME/.m2/settings.xml) contains references to the ONAP repositories and OpenDaylight repositories.
+
+2. To compile, run "mvn clean install".
\ No newline at end of file
diff --git a/docs/sli/northbound/docs/apis/asdcApi.rst b/docs/sli/northbound/docs/apis/asdcApi.rst
new file mode 100644
index 0000000..c909140
--- /dev/null
+++ b/docs/sli/northbound/docs/apis/asdcApi.rst
@@ -0,0 +1,15 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+ASDC-API (2017-02-01)
+=====================
+
+.. toctree::
+   :maxdepth: 1
+   :titlesonly:
+
+
+
+.. swaggerv2doc:: https://gerrit.onap.org/r/gitweb?p=ccsdk/sli/northbound.git;a=blob_plain;f=asdcApi/model/src/main/resources/asdc-api.20170201.json
+
+
diff --git a/docs/sli/northbound/docs/apis/dataChange.rst b/docs/sli/northbound/docs/apis/dataChange.rst
new file mode 100644
index 0000000..9a9dc04
--- /dev/null
+++ b/docs/sli/northbound/docs/apis/dataChange.rst
@@ -0,0 +1,15 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+dataChange(2015-05-19)
+======================
+
+.. toctree::
+   :maxdepth: 1
+   :titlesonly:
+
+
+
+.. swaggerv2doc:: https://gerrit.onap.org/r/gitweb?p=ccsdk/sli/northbound.git;a=blob_plain;f=dataChange/model/src/main/resources/dataChange.20150519.json
+
+
diff --git a/docs/sli/northbound/docs/architecture.rst b/docs/sli/northbound/docs/architecture.rst
new file mode 100644
index 0000000..f2648df
--- /dev/null
+++ b/docs/sli/northbound/docs/architecture.rst
@@ -0,0 +1,12 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Architecture
+============
+
+
+Capabilities
+------------
+This repository contains source code and Yang models for the northbound interfaces
+used to process updates from SDC (ASDC-API) and for processing data change notifications
+from A&AI (dataChange).
diff --git a/docs/sli/northbound/docs/build.rst b/docs/sli/northbound/docs/build.rst
new file mode 100644
index 0000000..0a4c308
--- /dev/null
+++ b/docs/sli/northbound/docs/build.rst
@@ -0,0 +1,18 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Build
+=====
+
+
+Environment
+-----------
+Requires maven release 3.3 or greater
+
+Steps
+-----
+To compile this code:
+
+1. Make sure your local Maven settings file ($HOME/.m2/settings.xml) contains references to the ONAP repositories and OpenDaylight repositories.
+
+2. To compile, run "mvn clean install".
\ No newline at end of file
diff --git a/docs/sli/northbound/docs/index.rst b/docs/sli/northbound/docs/index.rst
new file mode 100644
index 0000000..9be06c8
--- /dev/null
+++ b/docs/sli/northbound/docs/index.rst
@@ -0,0 +1,13 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+CCSDK SLI Northbound API
+------------------------
+.. toctree::
+   :maxdepth: 1
+
+   architecture.rst
+   offeredapis.rst
+   logging.rst
+   build.rst
+   release-notes.rst
+
diff --git a/docs/sli/northbound/docs/logging.rst b/docs/sli/northbound/docs/logging.rst
new file mode 100644
index 0000000..187eb03
--- /dev/null
+++ b/docs/sli/northbound/docs/logging.rst
@@ -0,0 +1,14 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Logging
+=======
+CCSDK uses slf4j to log messages to the standard OpenDaylight karaf.log
+log file.
+
+Where to Access Information
+---------------------------
+Logs are found within the SDNC docker container, in the directory
+/opt/opendaylight/current/data/logs.
+
+
diff --git a/docs/sli/northbound/docs/nodes.rst b/docs/sli/northbound/docs/nodes.rst
new file mode 100644
index 0000000..3bdeabc
--- /dev/null
+++ b/docs/sli/northbound/docs/nodes.rst
@@ -0,0 +1,1031 @@
+--- 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
+^^^^^^^
+
+::
+
+    <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>
diff --git a/docs/sli/northbound/docs/offeredapis.rst b/docs/sli/northbound/docs/offeredapis.rst
new file mode 100644
index 0000000..2eebdec
--- /dev/null
+++ b/docs/sli/northbound/docs/offeredapis.rst
@@ -0,0 +1,13 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Offered APIs
+============
+
+.. toctree::
+   :maxdepth: 1
+   :titlesonly:
+
+   apis/asdcApi.rst
+   apis/dataChange.rst
+
diff --git a/docs/sli/northbound/docs/release-notes.rst b/docs/sli/northbound/docs/release-notes.rst
new file mode 100644
index 0000000..21ff338
--- /dev/null
+++ b/docs/sli/northbound/docs/release-notes.rst
@@ -0,0 +1,45 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+Release Notes
+=============
+
+.. note::
+   * This Release Notes must be updated each time the team decides to Release new artifacts.
+   * The scope of this Release Notes is for this particular component. In other words, each ONAP component has its Release Notes.
+   * This Release Notes is cumulative, the most recently Released artifact is made visible in the top of this Release Notes.
+   * Except the date and the version number, all the other sections are optional but there must be at least one section describing the purpose of this new release.
+   * This note must be removed after content has been added.
+
+
+Version: x.y.z
+--------------
+
+
+:Release Date: yyyy-mm-dd
+
+
+
+**New Features**
+
+One or two sentences explaining the purpose of this Release.
+
+**Bug Fixes**
+   - `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and a sentence explaining what this defect is addressing.
+**Known Issues**
+   - `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and two, three sentences.
+     One sentences explaining what is the issue.
+
+     Another sentence explaining the impact of the issue.
+
+     And an optional sentence providing a workaround.
+
+**Security Issues**
+   You may want to include a reference to CVE (Common Vulnerabilities and Exposures) `CVE <https://cve.mitre.org>`_
+
+
+**Upgrade Notes**
+
+**Deprecation Notes**
+
+**Other**
+
diff --git a/docs/sli/northbound/index.rst b/docs/sli/northbound/index.rst
new file mode 100644
index 0000000..9be06c8
--- /dev/null
+++ b/docs/sli/northbound/index.rst
@@ -0,0 +1,13 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+CCSDK SLI Northbound API
+------------------------
+.. toctree::
+   :maxdepth: 1
+
+   architecture.rst
+   offeredapis.rst
+   logging.rst
+   build.rst
+   release-notes.rst
+
diff --git a/docs/sli/northbound/logging.rst b/docs/sli/northbound/logging.rst
new file mode 100644
index 0000000..187eb03
--- /dev/null
+++ b/docs/sli/northbound/logging.rst
@@ -0,0 +1,14 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Logging
+=======
+CCSDK uses slf4j to log messages to the standard OpenDaylight karaf.log
+log file.
+
+Where to Access Information
+---------------------------
+Logs are found within the SDNC docker container, in the directory
+/opt/opendaylight/current/data/logs.
+
+
diff --git a/docs/sli/northbound/nodes.rst b/docs/sli/northbound/nodes.rst
new file mode 100644
index 0000000..3bdeabc
--- /dev/null
+++ b/docs/sli/northbound/nodes.rst
@@ -0,0 +1,1031 @@
+--- 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
+^^^^^^^
+
+::
+
+    <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>
diff --git a/docs/sli/northbound/offeredapis.rst b/docs/sli/northbound/offeredapis.rst
new file mode 100644
index 0000000..2eebdec
--- /dev/null
+++ b/docs/sli/northbound/offeredapis.rst
@@ -0,0 +1,13 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Offered APIs
+============
+
+.. toctree::
+   :maxdepth: 1
+   :titlesonly:
+
+   apis/asdcApi.rst
+   apis/dataChange.rst
+
diff --git a/docs/sli/northbound/release-notes.rst b/docs/sli/northbound/release-notes.rst
new file mode 100644
index 0000000..21ff338
--- /dev/null
+++ b/docs/sli/northbound/release-notes.rst
@@ -0,0 +1,45 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+Release Notes
+=============
+
+.. note::
+   * This Release Notes must be updated each time the team decides to Release new artifacts.
+   * The scope of this Release Notes is for this particular component. In other words, each ONAP component has its Release Notes.
+   * This Release Notes is cumulative, the most recently Released artifact is made visible in the top of this Release Notes.
+   * Except the date and the version number, all the other sections are optional but there must be at least one section describing the purpose of this new release.
+   * This note must be removed after content has been added.
+
+
+Version: x.y.z
+--------------
+
+
+:Release Date: yyyy-mm-dd
+
+
+
+**New Features**
+
+One or two sentences explaining the purpose of this Release.
+
+**Bug Fixes**
+   - `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and a sentence explaining what this defect is addressing.
+**Known Issues**
+   - `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and two, three sentences.
+     One sentences explaining what is the issue.
+
+     Another sentence explaining the impact of the issue.
+
+     And an optional sentence providing a workaround.
+
+**Security Issues**
+   You may want to include a reference to CVE (Common Vulnerabilities and Exposures) `CVE <https://cve.mitre.org>`_
+
+
+**Upgrade Notes**
+
+**Deprecation Notes**
+
+**Other**
+
diff --git a/docs/sli/plugins/architecture.rst b/docs/sli/plugins/architecture.rst
new file mode 100644
index 0000000..8daa0d3
--- /dev/null
+++ b/docs/sli/plugins/architecture.rst
@@ -0,0 +1,27 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Architecture
+============
+
+.. note::
+   * This section is used to describe a software component from a high level
+     view of capability, common usage scenarios, and interactions with other
+     components required in the usage scenarios.  
+   
+   * The architecture section is typically: provided in a platform-component
+     and sdk collections; and referenced from developer and user guides.
+   
+   * This note must be removed after content has been added.
+
+
+Capabilities
+------------
+
+
+Usage Scenarios
+---------------
+
+
+Interactions
+------------
diff --git a/docs/sli/plugins/build.rst b/docs/sli/plugins/build.rst
new file mode 100644
index 0000000..0a4c308
--- /dev/null
+++ b/docs/sli/plugins/build.rst
@@ -0,0 +1,18 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Build
+=====
+
+
+Environment
+-----------
+Requires maven release 3.3 or greater
+
+Steps
+-----
+To compile this code:
+
+1. Make sure your local Maven settings file ($HOME/.m2/settings.xml) contains references to the ONAP repositories and OpenDaylight repositories.
+
+2. To compile, run "mvn clean install".
\ No newline at end of file
diff --git a/docs/sli/plugins/docs/architecture.rst b/docs/sli/plugins/docs/architecture.rst
new file mode 100644
index 0000000..8daa0d3
--- /dev/null
+++ b/docs/sli/plugins/docs/architecture.rst
@@ -0,0 +1,27 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Architecture
+============
+
+.. note::
+   * This section is used to describe a software component from a high level
+     view of capability, common usage scenarios, and interactions with other
+     components required in the usage scenarios.  
+   
+   * The architecture section is typically: provided in a platform-component
+     and sdk collections; and referenced from developer and user guides.
+   
+   * This note must be removed after content has been added.
+
+
+Capabilities
+------------
+
+
+Usage Scenarios
+---------------
+
+
+Interactions
+------------
diff --git a/docs/sli/plugins/docs/build.rst b/docs/sli/plugins/docs/build.rst
new file mode 100644
index 0000000..0a4c308
--- /dev/null
+++ b/docs/sli/plugins/docs/build.rst
@@ -0,0 +1,18 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Build
+=====
+
+
+Environment
+-----------
+Requires maven release 3.3 or greater
+
+Steps
+-----
+To compile this code:
+
+1. Make sure your local Maven settings file ($HOME/.m2/settings.xml) contains references to the ONAP repositories and OpenDaylight repositories.
+
+2. To compile, run "mvn clean install".
\ No newline at end of file
diff --git a/docs/sli/plugins/docs/index.rst b/docs/sli/plugins/docs/index.rst
new file mode 100644
index 0000000..83bb78a
--- /dev/null
+++ b/docs/sli/plugins/docs/index.rst
@@ -0,0 +1,12 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+CCSDK Service Logic Interpretor Plugins
+----------------------------------------
+.. toctree::
+   :maxdepth: 1
+
+   architecture.rst
+   offeredapis.rst
+   logging.rst
+   build.rst
+   release-notes.rst
diff --git a/docs/sli/plugins/docs/logging.rst b/docs/sli/plugins/docs/logging.rst
new file mode 100644
index 0000000..187eb03
--- /dev/null
+++ b/docs/sli/plugins/docs/logging.rst
@@ -0,0 +1,14 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Logging
+=======
+CCSDK uses slf4j to log messages to the standard OpenDaylight karaf.log
+log file.
+
+Where to Access Information
+---------------------------
+Logs are found within the SDNC docker container, in the directory
+/opt/opendaylight/current/data/logs.
+
+
diff --git a/docs/sli/plugins/docs/offeredapis.rst b/docs/sli/plugins/docs/offeredapis.rst
new file mode 100644
index 0000000..e20c786
--- /dev/null
+++ b/docs/sli/plugins/docs/offeredapis.rst
@@ -0,0 +1,6 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Offered APIs
+============
+
diff --git a/docs/sli/plugins/docs/release-notes.rst b/docs/sli/plugins/docs/release-notes.rst
new file mode 100644
index 0000000..b451657
--- /dev/null
+++ b/docs/sli/plugins/docs/release-notes.rst
@@ -0,0 +1,46 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+Release Notes
+=============
+
+.. note::
+   * This Release Notes must be updated each time the team decides to Release new artifacts.
+   * The scope of this Release Notes is for this particular component. In other words, each ONAP component has its Release Notes.
+   * This Release Notes is cumulative, the most recently Released artifact is made visible in the top of this Release Notes.
+   * Except the date and the version number, all the other sections are optional but there must be at least one section describing the purpose of this new release.
+   * This note must be removed after content has been added.
+
+
+Version: x.y.z
+--------------
+
+
+:Release Date: yyyy-mm-dd
+
+
+
+**New Features**
+
+One or two sentences explaining the purpose of this Release.
+
+**Bug Fixes**
+   - `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and a sentence explaining what this defect is addressing.
+**Known Issues**
+   - `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and two, three sentences.
+     One sentences explaining what is the issue.
+
+     Another sentence explaining the impact of the issue.
+
+     And an optional sentence providing a workaround.
+
+**Security Issues**
+   You may want to include a reference to CVE (Common Vulnerabilities and Exposures) `CVE <https://cve.mitre.org>`_
+
+
+**Upgrade Notes**
+
+**Deprecation Notes**
+
+**Other**
+
+===========
\ No newline at end of file
diff --git a/docs/sli/plugins/index.rst b/docs/sli/plugins/index.rst
new file mode 100644
index 0000000..83bb78a
--- /dev/null
+++ b/docs/sli/plugins/index.rst
@@ -0,0 +1,12 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+CCSDK Service Logic Interpretor Plugins
+----------------------------------------
+.. toctree::
+   :maxdepth: 1
+
+   architecture.rst
+   offeredapis.rst
+   logging.rst
+   build.rst
+   release-notes.rst
diff --git a/docs/sli/plugins/logging.rst b/docs/sli/plugins/logging.rst
new file mode 100644
index 0000000..187eb03
--- /dev/null
+++ b/docs/sli/plugins/logging.rst
@@ -0,0 +1,14 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Logging
+=======
+CCSDK uses slf4j to log messages to the standard OpenDaylight karaf.log
+log file.
+
+Where to Access Information
+---------------------------
+Logs are found within the SDNC docker container, in the directory
+/opt/opendaylight/current/data/logs.
+
+
diff --git a/docs/sli/plugins/offeredapis.rst b/docs/sli/plugins/offeredapis.rst
new file mode 100644
index 0000000..e20c786
--- /dev/null
+++ b/docs/sli/plugins/offeredapis.rst
@@ -0,0 +1,6 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+Offered APIs
+============
+
diff --git a/docs/sli/plugins/release-notes.rst b/docs/sli/plugins/release-notes.rst
new file mode 100644
index 0000000..b451657
--- /dev/null
+++ b/docs/sli/plugins/release-notes.rst
@@ -0,0 +1,46 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+Release Notes
+=============
+
+.. note::
+   * This Release Notes must be updated each time the team decides to Release new artifacts.
+   * The scope of this Release Notes is for this particular component. In other words, each ONAP component has its Release Notes.
+   * This Release Notes is cumulative, the most recently Released artifact is made visible in the top of this Release Notes.
+   * Except the date and the version number, all the other sections are optional but there must be at least one section describing the purpose of this new release.
+   * This note must be removed after content has been added.
+
+
+Version: x.y.z
+--------------
+
+
+:Release Date: yyyy-mm-dd
+
+
+
+**New Features**
+
+One or two sentences explaining the purpose of this Release.
+
+**Bug Fixes**
+   - `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and a sentence explaining what this defect is addressing.
+**Known Issues**
+   - `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and two, three sentences.
+     One sentences explaining what is the issue.
+
+     Another sentence explaining the impact of the issue.
+
+     And an optional sentence providing a workaround.
+
+**Security Issues**
+   You may want to include a reference to CVE (Common Vulnerabilities and Exposures) `CVE <https://cve.mitre.org>`_
+
+
+**Upgrade Notes**
+
+**Deprecation Notes**
+
+**Other**
+
+===========
\ No newline at end of file