aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
authorlj1412 <lji@research.att.com>2017-02-14 15:10:16 +0000
committerlj1412 <lji@research.att.com>2017-02-14 15:10:18 +0000
commit42aa7bf4db502ab29b7573f4ee7ea14fbcdfc754 (patch)
tree76ce583397de136e1a59e82d5ef54965b091fdd3 /docs
parent2422dcaf91799e0fc6cf08a370021bee2d803ba3 (diff)
Init dcae.dcae-inventory
Change-Id: I858617f32ab809c544ebf08310991b502917e6b3 Signed-off-by: lj1412 <lji@research.att.com>
Diffstat (limited to 'docs')
-rw-r--r--docs/API.adoc623
-rw-r--r--docs/DatabaseTables.md97
-rw-r--r--docs/Deployment.md39
-rw-r--r--docs/Design.md142
-rw-r--r--docs/Upgrade.md13
-rw-r--r--docs/images/dcae_inventory_communication.pngbin0 -> 36079 bytes
6 files changed, 914 insertions, 0 deletions
diff --git a/docs/API.adoc b/docs/API.adoc
new file mode 100644
index 0000000..ea837e6
--- /dev/null
+++ b/docs/API.adoc
@@ -0,0 +1,623 @@
+= DCAE Inventory API
+
+
+[[_overview]]
+== Overview
+DCAE Inventory is a web service that provides the following:
+
+. Real-time data on all DCAE services and their components
+. Comprehensive details on available DCAE service types
+
+
+=== Version information
+[%hardbreaks]
+_Version_ : 1.0.0
+
+
+
+
+[[_paths]]
+== Paths
+
+[[_dcaeservicetypesget]]
+=== GET /dcae-service-types
+
+==== Description
+Get a list of `DCAEServiceType` objects.
+
+
+==== Parameters
+
+[options="header", cols=".^2,.^3,.^9,.^4,.^2"]
+|===
+|Type|Name|Description|Schema|Default
+|*Query*|*offset* +
+_optional_|Query resultset offset used for pagination (zero-based)|integer(int32)|
+|*Query*|*serviceId* +
+_optional_||string|
+|*Query*|*serviceLocation* +
+_optional_||string|
+|*Query*|*vnfType* +
+_optional_||string|
+|===
+
+
+==== Responses
+
+[options="header", cols=".^2,.^14,.^4"]
+|===
+|HTTP Code|Description|Schema
+|*200*|List of `DCAEServiceType` objects|<<_inlineresponse200,InlineResponse200>>
+|===
+
+
+==== Consumes
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+==== Produces
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+[[_dcaeservicetypestypenameget]]
+=== GET /dcae-service-types/{typeName}
+
+==== Description
+Get a `DCAEServiceType` object.
+
+
+==== Parameters
+
+[options="header", cols=".^2,.^3,.^9,.^4,.^2"]
+|===
+|Type|Name|Description|Schema|Default
+|*Path*|*typeName* +
+_required_||string|
+|===
+
+
+==== Responses
+
+[options="header", cols=".^2,.^14,.^4"]
+|===
+|HTTP Code|Description|Schema
+|*200*|Single `DCAEServiceType` object|<<_dcaeservicetype,DCAEServiceType>>
+|*404*|Resource not found|<<_dcaeservicetype,DCAEServiceType>>
+|===
+
+
+==== Consumes
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+==== Produces
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+[[_dcaeservicetypestypenameput]]
+=== PUT /dcae-service-types/{typeName}
+
+==== Description
+Inserts a new `DCAEServiceType` or updates an existing instance. Updates are only allowed iff there are no running DCAE services of the requested type,
+
+
+==== Parameters
+
+[options="header", cols=".^2,.^3,.^9,.^4,.^2"]
+|===
+|Type|Name|Description|Schema|Default
+|*Path*|*typeName* +
+_required_||string|
+|*Body*|*body* +
+_required_||<<_dcaeservicetyperequest,DCAEServiceTypeRequest>>|
+|===
+
+
+==== Responses
+
+[options="header", cols=".^2,.^14,.^4"]
+|===
+|HTTP Code|Description|Schema
+|*200*|Single `DCAEServiceType` object.|<<_dcaeservicetype,DCAEServiceType>>
+|*400*|Bad request provided.|<<_apiresponsemessage,ApiResponseMessage>>
+|*409*|Failed to update because there are still DCAE services of the requested type running.|<<_apiresponsemessage,ApiResponseMessage>>
+|===
+
+
+==== Consumes
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+==== Produces
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+[[_dcaeservicesget]]
+=== GET /dcae-services
+
+==== Description
+Get a list of `DCAEService` objects.
+
+
+==== Parameters
+
+[options="header", cols=".^2,.^3,.^9,.^4,.^2"]
+|===
+|Type|Name|Description|Schema|Default
+|*Query*|*componentType* +
+_optional_|Use to filter by a specific DCAE service component type|string|
+|*Query*|*created* +
+_optional_|Use to filter by created time|string|
+|*Query*|*offset* +
+_optional_|Query resultset offset used for pagination (zero-based)|integer(int32)|
+|*Query*|*shareable* +
+_optional_|Use to filter by DCAE services that have shareable components or not|boolean|
+|*Query*|*typeName* +
+_optional_|DCAE service type name|string|
+|*Query*|*vnfId* +
+_optional_||string|
+|*Query*|*vnfLocation* +
+_optional_||string|
+|*Query*|*vnfType* +
+_optional_||string|
+|===
+
+
+==== Responses
+
+[options="header", cols=".^2,.^14,.^4"]
+|===
+|HTTP Code|Description|Schema
+|*200*|List of `DCAEService` objects|<<_inlineresponse2001,InlineResponse2001>>
+|*502*|Bad response from DCAE controller|<<_apiresponsemessage,ApiResponseMessage>>
+|*504*|Failed to connect with DCAE controller|<<_apiresponsemessage,ApiResponseMessage>>
+|===
+
+
+==== Consumes
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+==== Produces
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+[[_dcaeservicesgroupbypropertynameget]]
+=== GET /dcae-services-groupby/{propertyName}
+
+==== Description
+Get a list of unique values for the given `propertyName`
+
+
+==== Parameters
+
+[options="header", cols=".^2,.^3,.^9,.^4,.^2"]
+|===
+|Type|Name|Description|Schema|Default
+|*Path*|*propertyName* +
+_required_|Property to find unique values. Restricted to `type`, `vnfType`, `vnfLocation`|string|
+|===
+
+
+==== Responses
+
+[options="header", cols=".^2,.^14,.^4"]
+|===
+|HTTP Code|Description|Schema
+|*200*|List of unique property values|<<_dcaeservicegroupbyresults,DCAEServiceGroupByResults>>
+|===
+
+
+==== Consumes
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+==== Produces
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+[[_dcaeservicesserviceidget]]
+=== GET /dcae-services/{serviceId}
+
+==== Description
+Get a `DCAEService` object.
+
+
+==== Parameters
+
+[options="header", cols=".^2,.^3,.^9,.^4,.^2"]
+|===
+|Type|Name|Description|Schema|Default
+|*Path*|*serviceId* +
+_required_||string|
+|===
+
+
+==== Responses
+
+[options="header", cols=".^2,.^14,.^4"]
+|===
+|HTTP Code|Description|Schema
+|*200*|Single `DCAEService` object|<<_dcaeservice,DCAEService>>
+|*404*|DCAE service not found|<<_apiresponsemessage,ApiResponseMessage>>
+|*502*|Bad response from DCAE controller|<<_apiresponsemessage,ApiResponseMessage>>
+|*504*|Failed to connect with DCAE controller|<<_apiresponsemessage,ApiResponseMessage>>
+|===
+
+
+==== Consumes
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+==== Produces
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+[[_dcaeservicesserviceidput]]
+=== PUT /dcae-services/{serviceId}
+
+==== Description
+Put a new or update an existing `DCAEService` object.
+
+
+==== Parameters
+
+[options="header", cols=".^2,.^3,.^9,.^4,.^2"]
+|===
+|Type|Name|Description|Schema|Default
+|*Path*|*serviceId* +
+_required_||string|
+|*Body*|*body* +
+_required_||<<_dcaeservicerequest,DCAEServiceRequest>>|
+|===
+
+
+==== Responses
+
+[options="header", cols=".^2,.^14,.^4"]
+|===
+|HTTP Code|Description|Schema
+|*200*|Single `DCAEService` object|<<_dcaeservice,DCAEService>>
+|*422*|Bad request provided|<<_apiresponsemessage,ApiResponseMessage>>
+|===
+
+
+==== Consumes
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+==== Produces
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+[[_dcaeservicesserviceiddelete]]
+=== DELETE /dcae-services/{serviceId}
+
+==== Description
+Remove an existing `DCAEService` object.
+
+
+==== Parameters
+
+[options="header", cols=".^2,.^3,.^9,.^4,.^2"]
+|===
+|Type|Name|Description|Schema|Default
+|*Path*|*serviceId* +
+_required_||string|
+|===
+
+
+==== Responses
+
+[options="header", cols=".^2,.^14,.^4"]
+|===
+|HTTP Code|Description|Schema
+|*200*|DCAE service has been removed|No Content
+|*404*|Unknown DCAE service|<<_apiresponsemessage,ApiResponseMessage>>
+|===
+
+
+==== Consumes
+
+* `application/vnd.dcae.inventory.v1+json`
+* `application/json`
+
+
+==== Produces
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+
+
+[[_definitions]]
+== Definitions
+
+[[_apiresponsemessage]]
+=== ApiResponseMessage
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*code* +
+_optional_||integer(int32)
+|*message* +
+_optional_||string
+|*type* +
+_optional_||string
+|===
+
+
+[[_dcaeservice]]
+=== DCAEService
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*components* +
+_optional_||< <<_dcaeservicecomponent,DCAEServiceComponent>> > array
+|*created* +
+_optional_||string(date-time)
+|*deploymentRef* +
+_optional_|Reference to a Cloudify deployment|string
+|*modified* +
+_optional_||string(date-time)
+|*selfLink* +
+_optional_|Link.title is serviceId|<<_link,Link>>
+|*serviceId* +
+_optional_||string
+|*typeLink* +
+_optional_|Link.title is typeName|<<_link,Link>>
+|*vnfId* +
+_optional_||string
+|*vnfLink* +
+_optional_|Link.title is vnfId|<<_link,Link>>
+|*vnfLocation* +
+_optional_|Location information of the associated VNF|string
+|*vnfType* +
+_optional_||string
+|===
+
+
+[[_dcaeservicecomponent]]
+=== DCAEServiceComponent
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*componentId* +
+_required_|The id format is unique to the source|string
+|*componentLink* +
+_required_|Link to the underlying resource of this component|<<_link,Link>>
+|*componentSource* +
+_required_|Specifies the name of the underying source service that is responsible for this components|enum (DCAEController, DMaaPController)
+|*componentType* +
+_required_||string
+|*created* +
+_required_||string(date-time)
+|*location* +
+_optional_|Location information of the component|string
+|*modified* +
+_required_||string(date-time)
+|*shareable* +
+_required_|Used to determine if this component can be shared amongst different DCAE services|integer(int32)
+|*status* +
+_optional_||string
+|===
+
+
+[[_dcaeservicecomponentrequest]]
+=== DCAEServiceComponentRequest
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*componentId* +
+_required_|The id format is unique to the source|string
+|*componentSource* +
+_required_|Specifies the name of the underying source service that is responsible for this components|enum (DCAEController, DMaaPController)
+|*componentType* +
+_required_||string
+|*shareable* +
+_required_|Used to determine if this component can be shared amongst different DCAE services|integer(int32)
+|===
+
+
+[[_dcaeservicegroupbyresults]]
+=== DCAEServiceGroupByResults
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*propertyName* +
+_optional_|Property name of DCAE service that the group by operation was performed on|string
+|*propertyValues* +
+_optional_||< <<_dcaeservicegroupbyresultspropertyvalues,DCAEServiceGroupByResultsPropertyValues>> > array
+|===
+
+
+[[_dcaeservicegroupbyresultspropertyvalues]]
+=== DCAEServiceGroupByResultsPropertyValues
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*count* +
+_optional_||integer(int32)
+|*dcaeServiceQueryLink* +
+_optional_|Link.title is the DCAE service property value. Following this link will provide a list of DCAE services that all have this property value.|<<_link,Link>>
+|*propertyValue* +
+_optional_||string
+|===
+
+
+[[_dcaeservicerequest]]
+=== DCAEServiceRequest
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*components* +
+_required_|List of DCAE service components that this service is composed of|< <<_dcaeservicecomponentrequest,DCAEServiceComponentRequest>> > array
+|*deploymentRef* +
+_optional_|Reference to a Cloudify deployment|string
+|*typeName* +
+_required_|Name of the associated DCAE service type|string
+|*vnfId* +
+_required_|Id of the associated VNF that this service is monitoring|string
+|*vnfLocation* +
+_required_|Location identifier of the associated VNF that this service is monitoring|string
+|*vnfType* +
+_required_|The type of the associated VNF that this service is monitoring|string
+|===
+
+
+[[_dcaeservicetype]]
+=== DCAEServiceType
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*blueprintTemplate* +
+_required_|String representation of a Cloudify blueprint with unbound variables|string
+|*created* +
+_required_|Created timestamp for this DCAE service type in epoch time|string(date-time)
+|*owner* +
+_required_|Name of the owner of this DCAE service type|string
+|*selfLink* +
+_optional_|Link.title is typeName|<<_link,Link>>
+|*serviceIds* +
+_optional_|List of service ids that are associated with this DCAE service type|< string > array
+|*serviceLocations* +
+_optional_|List of service locations that are associated with this DCAE service type|< string > array
+|*typeName* +
+_required_|Unique name for this DCAE service type|string
+|*vnfTypes* +
+_required_|List of VNF types associated with this DCAE service type|< string > array
+|===
+
+
+[[_dcaeservicetyperequest]]
+=== DCAEServiceTypeRequest
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*blueprintTemplate* +
+_required_|String representation of a Cloudify blueprint with unbound variables|string
+|*owner* +
+_required_||string
+|*serviceIds* +
+_optional_|List of service ids that are used to associate with DCAE service type. DCAE service types with this propery as null or empty means them apply for every service id.|< string > array
+|*serviceLocations* +
+_optional_|List of service locations that are used to associate with DCAE service type. DCAE service types with this propery as null or empty means them apply for every service location.|< string > array
+|*vnfTypes* +
+_required_||< string > array
+|===
+
+
+[[_inlineresponse200]]
+=== InlineResponse200
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*items* +
+_optional_||< <<_dcaeservicetype,DCAEServiceType>> > array
+|*links* +
+_optional_||<<_inlineresponse200links,InlineResponse200Links>>
+|*totalCount* +
+_optional_||integer(int32)
+|===
+
+
+[[_inlineresponse2001]]
+=== InlineResponse2001
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*items* +
+_optional_||< <<_dcaeservice,DCAEService>> > array
+|*links* +
+_optional_||<<_inlineresponse200links,InlineResponse200Links>>
+|*totalCount* +
+_optional_||integer(int32)
+|===
+
+
+[[_inlineresponse200links]]
+=== InlineResponse200Links
+Pagination links
+
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*nextLink* +
+_optional_||<<_link,Link>>
+|*previousLink* +
+_optional_||<<_link,Link>>
+|===
+
+
+[[_link]]
+=== Link
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*params* +
+_optional_||< string, string > map
+|*rel* +
+_optional_||string
+|*rels* +
+_optional_||< string > array
+|*title* +
+_optional_||string
+|*type* +
+_optional_||string
+|*uri* +
+_optional_||string
+|*uriBuilder* +
+_optional_||<<_uribuilder,UriBuilder>>
+|===
+
+
+[[_uribuilder]]
+=== UriBuilder
+_Type_ : object
+
+
+
+
+
diff --git a/docs/DatabaseTables.md b/docs/DatabaseTables.md
new file mode 100644
index 0000000..f3df9e1
--- /dev/null
+++ b/docs/DatabaseTables.md
@@ -0,0 +1,97 @@
+# Database Tables
+
+As of version 0.12.0.
+
+## `dcae_service_types`
+
+### Relationships
+
+* 1:1 - `dcae_services`
+
+### Schema
+
+```
+ Table "public.dcae_service_types"
+ Column | Type | Modifiers
+--------------------+-----------------------------+-----------
+ type_name | character varying | not null
+ owner | character varying | not null
+ vnf_types | character varying[] | not null
+ service_ids | character varying[] |
+ service_locations | character varying[] |
+ blueprint_template | text | not null
+ created | timestamp without time zone | not null
+ is_active | boolean | not null
+Indexes:
+ "pk_type_created" PRIMARY KEY, btree (type_name, created)
+```
+
+## `dcae_services`
+
+### Relationships
+
+* 1:1 - `dcae_service_types`
+* N:N - `dcae_service_components` mapped through `dcae_services_components_maps`
+
+### Schema
+
+```
+ Table "public.dcae_services"
+ Column | Type | Modifiers
+----------------+-----------------------------+-----------
+ service_id | character varying | not null
+ type_name | character varying | not null
+ vnf_id | character varying | not null
+ vnf_type | character varying | not null
+ vnf_location | character varying | not null
+ deployment_ref | character varying |
+ created | timestamp without time zone | not null
+ modified | timestamp without time zone | not null
+ status | character varying | not null
+Indexes:
+ "dcae_services_pkey" PRIMARY KEY, btree (service_id)
+Referenced by:
+ TABLE "dcae_services_components_maps" CONSTRAINT "dcae_services_components_maps_service_id_fkey" FOREIGN KEY (service_id) REFERENCES dcae_services(service_id)
+```
+
+## `dcae_service_components`
+
+### Relationships
+
+* N:N - `dcae_services` mapped through `dcae_services_components_maps`
+
+### Schema
+
+```
+ Table "public.dcae_service_components"
+ Column | Type | Modifiers
+------------------+-----------------------------+-----------
+ component_id | character varying | not null
+ component_type | character varying | not null
+ component_source | character varying | not null
+ shareable | integer | default 0
+ created | timestamp without time zone | not null
+ modified | timestamp without time zone | not null
+Indexes:
+ "dcae_service_components_pkey" PRIMARY KEY, btree (component_id)
+Referenced by:
+ TABLE "dcae_services_components_maps" CONSTRAINT "dcae_services_components_maps_component_id_fkey" FOREIGN KEY (component_id) REFERENCES dcae_service_components(component_id)
+```
+
+## `dcae_services_components_maps`
+
+### Schema
+
+```
+ Table "public.dcae_services_components_maps"
+ Column | Type | Modifiers
+--------------+-----------------------------+-----------
+ service_id | character varying | not null
+ component_id | character varying | not null
+ created | timestamp without time zone | not null
+Indexes:
+ "dcae_services_components_maps_pkey" PRIMARY KEY, btree (service_id, component_id)
+Foreign-key constraints:
+ "dcae_services_components_maps_component_id_fkey" FOREIGN KEY (component_id) REFERENCES dcae_service_components(component_id)
+ "dcae_services_components_maps_service_id_fkey" FOREIGN KEY (service_id) REFERENCES dcae_services(service_id)
+```
diff --git a/docs/Deployment.md b/docs/Deployment.md
new file mode 100644
index 0000000..762af85
--- /dev/null
+++ b/docs/Deployment.md
@@ -0,0 +1,39 @@
+# Deployment Guide - DCAE Inventory
+*Last update: 2016-11-04*
+
+## Requirements
+
+### Network
+
+Requires ports 8080 to be open for inbound traffic on the machine that the service is hosted on.
+
+The DCAE Inventory relies on connectivity to a Postgres database, a DCAE Controller service instance, and a Databus Controller service instance all of which are configurable through the configuration file. The DCAE Inventory makes client-side calls to these external services.
+
+DCAE Inventory supports both HTTP and HTTPS through configuration setup.
+
+### Configuration
+
+The DCAE Inventory requires a configuration file and requires three groups of environment-dependent dynamic configuration information:
+
+1. Postgres database connection details
+ - `user`
+ - `password`
+ - `url`
+2. DCAE controller connection details
+ - `host`
+ - `port`
+ - `basePath`
+ - `user`
+ - `password`
+3. DMaaP controller connection details
+ - `host`
+
+In order for HTTPS to be enabled for DCAE Inventory, an HTTPS `applicationConnectors` need to be added to the configuration file. Details of this can be found [here](http://www.dropwizard.io/0.7.1/docs/manual/configuration.html#https). What is required at deployment time is a valide key store file (e.g. `PKCS12`) (i.e. set via `keyStorePath` parameter in the config) with the accompanying password (i.e. set via `keyStorePassword` parameter in the config).
+
+## Run Command
+
+The DCAE Inventory has been developed and tested using Java 8. Here is a sample run command:
+
+```
+java -jar dcae-inventory-1.0.0.jar server /opt/config.yml
+```
diff --git a/docs/Design.md b/docs/Design.md
new file mode 100644
index 0000000..4ce24d7
--- /dev/null
+++ b/docs/Design.md
@@ -0,0 +1,142 @@
+# DCAE Inventory: Design
+
+The DCAE Inventory is a web service that is responsible for managing DCAE service and DCAE service type information.
+
+## Terminology
+
+#### VNF
+
+"Virtual Network Function"
+
+Services that are customer facing and require monitoring.
+
+#### DCAE
+
+"Data Collections Analytics Events"
+
+A system responsible for monitoring and characterizing performance and behavior of running VNF services. DCAE emits events that are used by operations and to possibly change the policy of the managed VNF service.
+
+#### DCAE service component
+
+Applications and services that are built to be connected together to make up a DCAE service. These applications and services fall into the following categories:
+
+* Collectors
+* Analytics
+* Storage
+* Data buses
+
+#### DCAE service type
+
+Contains:
+
+* Composition details of a network of DCAE service components in the form of a Cloudify blueprint template
+* Metadata used to describe the DCAE service type
+* Relationship information - how it relates to associated services and VNF types
+
+Cloudify blueprint template refers to a Cloudify blueprint that has unbound variables that is to be resolved before use for orchestration.
+
+DCAE service type has a tight coupling with DCAE services where all DCAE services must be associated with a single existing DCAE service type. This is reinforced by the DCAE Inventory.
+
+#### DCAE service
+
+A fully composed, running instance of a DCAE service type. The DCAE service is intended to collect data and to perform a set number of pre-defined analysis on a running VNF. A single DCAE service is associated with a single running VNF.
+
+DCAE service is a resource with a representation that is provided by DCAE Inventory.
+
+## What is DCAE Inventory
+
+DCAE Inventory is a web service that provides the following:
+
+1. Real-time data on all DCAE services and their components
+2. Comprehensive details on available DCAE service types
+
+DCAE Inventory is a composite API that relies on other APIs to obtain resources on underlying components and uses these resources to compose a DCAE service resource. In addition, DCAE Inventory will store data that is unique to the DCAE service level including:
+
+* DCAE service metadata
+* DCAE service type description and composition details
+* Relationships between DCAE service and DCAE service types and their respective VNF and VNF types
+
+DCAE Inventory has a REST interface to service client requests. It has a well-defined query interface that would filter result sets based upon resource attributes.
+
+### API
+
+The full REST API reference can be found [here](API.adoc) (Careful! It's in AsciiDoc format). The DCAE Inventory service has been built to use [Swagger.io](http://swagger.io/) to document the API. The running service provides a YAML or JSON version of the specification of the DCAE Inventory API. Make the following curl call to fetch the YAML version:
+
+```
+curl <DCAE Inventory hostname>:8080/swagger.yaml
+```
+
+#### Using Swagger UI
+
+Use the following Swagger UI [chrome extension](https://chrome.google.com/webstore/detail/swagger-ui-console/ljlmonadebogfjabhkppkoohjkjclfai?hl=en) to view the specification in a nice view. Enter the URL you used in the above example `<DCAE Inventory hostname>:8080/swagger.yaml` into the input box of the Swagger UI page and hit *Explore*. You should see the complete API under *default*.
+
+## What DCAE Inventory is not
+
+* Not an inventory nor a catalog for VNFs
+* Not a catalog for DCAE components
+* Not the Data Bus controller's database
+* Not an orchestrator nor does it do DCAE service creation
+
+## Use cases
+
+### Closed-loop orchestration
+
+The DCAE platform makes DCAE system changes upon change triggers from A&AI.
+
+A&AI emits events upon the creation and the destruction of a VNF. These events contain information on what sort of change occurred and the VNF associated with the change. These events are handled by DCAE Orchestrator and triggers the process of orchestrating the deployment or the undeployment of a DCAE service associated with the VNF. DCAE Orchestrator makes queries to DCAE Inventory who then provides the information to ultimately answer the question "given this VNF, what DCAE service should be deployed or be undeployed?"
+
+During the orchestration process, DCAE Orchestrator pushes details of the deployed/undeployed DCAE services. These runtime details are stored and managed by the DCAE Inventory.
+
+### DCAE services dashboard
+
+The DCAE dashboard provides visibility into running DCAE services for operational purposes. It queries the DCAE Inventory for aggregate details on all the running DCAE services and for getting up-to-date status information on DCAE services and their components.
+
+## Service dependencies
+
+DCAE Inventory relies on several APIs to construct its composite resource in addition to the data that DCAE Inventory stores.
+
+The following is a communication diagram of how the data flows between the DCAE Inventory and its dependencies:
+
+![Communication diagram](images/dcae_inventory_communication.png)
+
+### DCAE Controller
+
+DCAE Inventory queries the DCAE controller to obtain an up-to-date projection of the state data per DCAE service component including their status i.e. DEPLOYED, RUNNING.
+
+### Data Bus Controller
+
+DCAE Inventory queries the Data Bus controller to obtain feed/topic details including the connection relationship between DCAE service components.
+
+### DCAE Orchestrator
+
+DCAE Inventory relies on the DCAE Orchestrator to push details of a DCAE service during the orchestration process particularly the DCAE service component runtime configuration information.
+
+### Camunda (Closed Loop)
+
+Camunda is a workflow design tool that creates and edits DCAE service types. In order to do DCAE service type updates, Camunda via a proxy service:
+
+1. Queries the DCAE Inventory for existing DCAE services for the given DCAE service type
+2. Undeploys all those DCAE services
+3. PUTs the new version of the DCAE service type
+
+The DCAE service types are associated with closed loop specific VNFs.
+
+## Technical implementation
+
+### Database
+
+DCAE Inventory uses the central Postgres as its database to store and to query its DCAE Inventory unique datasets. You can find the current table schemas for the DCAE Inventory tables [here](DatabaseTables.md).
+
+### Resiliency
+
+The central Postgres database has site-to-site replication to a redundant DCAE central location so the DCAE Inventory datasets are covered. The DCAE Inventory service is designed to be state-less and requires just the proper configuration information to be able to service requests. Configuration information includes:
+
+* Database connection details
+* DCAE controller connection details
+* Data bus controller connection details
+
+The chance of complete service outages is minimized by having redundancy. This requires load balancers for traffic management which does periodic health checks on all the instances to see if they are alive.
+
+### Security
+
+TBD
diff --git a/docs/Upgrade.md b/docs/Upgrade.md
new file mode 100644
index 0000000..11d2466
--- /dev/null
+++ b/docs/Upgrade.md
@@ -0,0 +1,13 @@
+# Upgrade Guide - DCAE Inventory
+*Last update: 2016-08-19*
+
+## 0.13.0 -> 1.0.0
+
+Requires a database table alteration if you wish to reuse an existing database table generated by DCAE inventory v0.13.0. The new schema is backwards compatible and safe for v0.13.0 records.
+
+Run the following SQL commands for the target Postgres DCAE inventory database:
+
+```
+alter table dcae_service_types add column service_ids varchar[];
+alter table dcae_service_types add column service_locations varchar[];
+```
diff --git a/docs/images/dcae_inventory_communication.png b/docs/images/dcae_inventory_communication.png
new file mode 100644
index 0000000..409f515
--- /dev/null
+++ b/docs/images/dcae_inventory_communication.png
Binary files differ