swagger: '2.0'
info:
  version: "2.1.0"
  title: DCAE Inventory API
  description: |
    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
  contact:
    email: dcae@lists.openecomp.org
externalDocs:
  description: DCAE Inventory
  url: https://gerrit.onap.org/r/#/admin/projects/dcae/dcae-inventory
paths:
  /dcae-service-types:
    get:
      summary: ""
      description: "Get a list of `DCAEServiceType` objects."
      operationId: "dcaeServiceTypesGet"
      consumes:
      - "application/json"
      - "application/vnd.dcae.inventory.v1+json"
      produces:
      - "application/json"
      - "application/vnd.dcae.inventory.v1+json"
      parameters:
      - name: "typeName"
        in: "query"
        description: "Filter by service type name"
        required: false
        type: "string"
      - name: "onlyLatest"
        in: "query"
        description: "If set to true, query returns just the latest versions of DCAE\
          \ service types. If set to false, then all versions are returned. Default\
          \ is true"
        required: false
        type: "boolean"
        default: true
      - name: "onlyActive"
        in: "query"
        description: "If set to true, query returns only *active* DCAE service types.\
          \ If set to false, then all DCAE service types are returned. Default is\
          \ true"
        required: false
        type: "boolean"
        default: true
      - name: "vnfType"
        in: "query"
        description: "Filter by associated vnf type. No wildcards, matches are explicit.\
          \ This field is treated case insensitive."
        required: false
        type: "string"
      - name: "serviceId"
        in: "query"
        description: "Filter by assocaited service id. Instances with service id null\
          \ or empty is always returned."
        required: false
        type: "string"
      - name: "serviceLocation"
        in: "query"
        description: "Filter by associated service location. Instances with service\
          \ location null or empty is always returned."
        required: false
        type: "string"
      - name: "asdcServiceId"
        in: "query"
        description: "Filter by associated asdc design service id. Setting this to\
          \ `NONE` will return instances that have asdc service id set to null"
        required: false
        type: "string"
      - name: "asdcResourceId"
        in: "query"
        description: "Filter by associated asdc design resource id. Setting this to\
          \ `NONE` will return instances that have asdc resource id set to null"
        required: false
        type: "string"
      - name: "offset"
        in: "query"
        description: "Query resultset offset used for pagination (zero-based)"
        required: false
        type: "integer"
        format: "int32"
      responses:
        200:
          description: "List of `DCAEServiceType` objects"
          schema:
            $ref: "#/definitions/InlineResponse200"
    post:
      summary: ""
      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,"
      operationId: "dcaeServiceTypesTypeNamePut"
      consumes:
      - "application/json"
      produces:
      - "application/json"
      parameters:
      - in: "body"
        name: "body"
        required: true
        schema:
          $ref: "#/definitions/DCAEServiceTypeRequest"
      responses:
        200:
          description: "Single `DCAEServiceType` object."
          schema:
            $ref: "#/definitions/DCAEServiceType"
        400:
          description: "Bad request provided."
          schema:
            $ref: "#/definitions/ApiResponseMessage"
        409:
          description: "Failed to update because there are still DCAE services of\
            \ the requested type running."
          schema:
            $ref: "#/definitions/ApiResponseMessage"
  /dcae-service-types/{typeId}:
    get:
      summary: ""
      description: "Get a `DCAEServiceType` object."
      operationId: "dcaeServiceTypesTypeIdGet"
      consumes:
      - "application/json"
      produces:
      - "application/json"
      parameters:
      - name: "typeId"
        in: "path"
        required: true
        type: "string"
      responses:
        200:
          description: "Single `DCAEServiceType` object"
          schema:
            $ref: "#/definitions/DCAEServiceType"
        404:
          description: "Resource not found"
          schema:
            $ref: "#/definitions/DCAEServiceType"
    delete:
      summary: ""
      description: "Deactivates existing `DCAEServiceType` instances"
      operationId: "dcaeServiceTypesTypeIdDelete"
      consumes:
      - "application/vnd.dcae.inventory.v1+json"
      - "application/json"
      produces:
      - "application/vnd.dcae.inventory.v1+json"
      - "application/json"
      parameters:
      - name: "typeId"
        in: "path"
        required: true
        type: "string"
      responses:
        200:
          description: "`DCAEServiceType` has been deactivated"
          schema:
            $ref: "#/definitions/ApiResponseMessage"
        410:
          description: "`DCAEServiceType` already gone"
          schema:
            $ref: "#/definitions/ApiResponseMessage"
        404:
          description: "`DCAEServiceType` not found"
          schema:
            $ref: "#/definitions/ApiResponseMessage"
  /dcae-services:
    get:
      summary: ""
      description: "Get a list of `DCAEService` objects."
      operationId: "dcaeServicesGet"
      consumes:
      - "application/json"
      - "application/vnd.dcae.inventory.v1+json"
      produces:
      - "application/json"
      - "application/vnd.dcae.inventory.v1+json"
      parameters:
      - name: "typeId"
        in: "query"
        description: "DCAE service type name"
        required: false
        type: "string"
      - name: "vnfId"
        in: "query"
        required: false
        type: "string"
      - name: "vnfType"
        in: "query"
        description: "Filter by associated vnf type. This field is treated case insensitive."
        required: false
        type: "string"
      - name: "vnfLocation"
        in: "query"
        required: false
        type: "string"
      - name: "componentType"
        in: "query"
        description: "Use to filter by a specific DCAE service component type"
        required: false
        type: "string"
      - name: "shareable"
        in: "query"
        description: "Use to filter by DCAE services that have shareable components\
          \ or not"
        required: false
        type: "boolean"
      - name: "created"
        in: "query"
        description: "Use to filter by created time"
        required: false
        type: "string"
      - name: "offset"
        in: "query"
        description: "Query resultset offset used for pagination (zero-based)"
        required: false
        type: "integer"
        format: "int32"
      responses:
        200:
          description: "List of `DCAEService` objects"
          schema:
            $ref: "#/definitions/InlineResponse2001"
        502:
          description: "Bad response from DCAE controller"
          schema:
            $ref: "#/definitions/ApiResponseMessage"
        504:
          description: "Failed to connect with DCAE controller"
          schema:
            $ref: "#/definitions/ApiResponseMessage"
  /dcae-services-groupby/{propertyName}:
    get:
      summary: ""
      description: "Get a list of unique values for the given `propertyName`"
      operationId: "dcaeServicesGroupbyPropertyNameGet"
      consumes:
      - "application/json"
      - "application/vnd.dcae.inventory.v1+json"
      produces:
      - "application/json"
      - "application/vnd.dcae.inventory.v1+json"
      parameters:
      - name: "propertyName"
        in: "path"
        description: "Property to find unique values. Restricted to `type`, `vnfType`,\
          \ `vnfLocation`"
        required: true
        type: "string"
      responses:
        200:
          description: "List of unique property values"
          schema:
            $ref: "#/definitions/DCAEServiceGroupByResults"
  /dcae-services/{serviceId}:
    get:
      summary: ""
      description: "Get a `DCAEService` object."
      operationId: "dcaeServicesServiceIdGet"
      consumes:
      - "application/json"
      - "application/vnd.dcae.inventory.v1+json"
      produces:
      - "application/json"
      - "application/vnd.dcae.inventory.v1+json"
      parameters:
      - name: "serviceId"
        in: "path"
        required: true
        type: "string"
      responses:
        200:
          description: "Single `DCAEService` object"
          schema:
            $ref: "#/definitions/DCAEService"
        502:
          description: "Bad response from DCAE controller"
          schema:
            $ref: "#/definitions/ApiResponseMessage"
        404:
          description: "DCAE service not found"
          schema:
            $ref: "#/definitions/ApiResponseMessage"
        504:
          description: "Failed to connect with DCAE controller"
          schema:
            $ref: "#/definitions/ApiResponseMessage"
    put:
      summary: ""
      description: "Put a new or update an existing `DCAEService` object."
      operationId: "dcaeServicesServiceIdPut"
      consumes:
      - "application/json"
      - "application/vnd.dcae.inventory.v1+json"
      produces:
      - "application/json"
      - "application/vnd.dcae.inventory.v1+json"
      parameters:
      - name: "serviceId"
        in: "path"
        required: true
        type: "string"
      - in: "body"
        name: "body"
        required: true
        schema:
          $ref: "#/definitions/DCAEServiceRequest"
      responses:
        200:
          description: "Single `DCAEService` object"
          schema:
            $ref: "#/definitions/DCAEService"
        422:
          description: "Bad request provided"
          schema:
            $ref: "#/definitions/ApiResponseMessage"
    delete:
      summary: ""
      description: "Remove an existing `DCAEService` object."
      operationId: "dcaeServicesServiceIdDelete"
      consumes:
      - "application/vnd.dcae.inventory.v1+json"
      - "application/json"
      produces:
      - "application/json"
      - "application/vnd.dcae.inventory.v1+json"
      parameters:
      - name: "serviceId"
        in: "path"
        required: true
        type: "string"
      responses:
        200:
          description: "DCAE service has been removed"
        404:
          description: "Unknown DCAE service"
          schema:
            $ref: "#/definitions/ApiResponseMessage"
definitions:
  DCAEServiceTypeRequest:
    type: "object"
    required:
    - "blueprintTemplate"
    - "owner"
    - "typeName"
    - "typeVersion"
    properties:
      owner:
        type: "string"
      typeName:
        type: "string"
        description: "Descriptive name for this DCAE service type"
      typeVersion:
        type: "integer"
        format: "int32"
        description: "Version number for this DCAE service type"
      blueprintTemplate:
        type: "string"
        description: "String representation of a Cloudify blueprint with unbound variables"
      serviceIds:
        type: "array"
        description: "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."
        items:
          type: "string"
      vnfTypes:
        type: "array"
        items:
          type: "string"
      serviceLocations:
        type: "array"
        description: "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."
        items:
          type: "string"
      asdcServiceId:
        type: "string"
        description: "Id of service this DCAE service type is associated with. Value\
          \ source is from ASDC's notification event's field `serviceInvariantUUID`."
      asdcResourceId:
        type: "string"
        description: "Id of vf/vnf instance this DCAE service type is associated with.\
          \ Value source is from ASDC's notification event's field `resourceInvariantUUID`."
      asdcServiceURL:
        type: "string"
        description: "URL to the ASDC service model"
  DCAEServiceComponentRequest:
    type: "object"
    required:
    - "componentId"
    - "componentSource"
    - "componentType"
    - "shareable"
    properties:
      componentId:
        type: "string"
        description: "The id format is unique to the source"
      componentType:
        type: "string"
      componentSource:
        type: "string"
        description: "Specifies the name of the underying source service that is responsible\
          \ for this components"
        enum:
        - "DCAEController"
        - "DMaaPController"
      shareable:
        type: "integer"
        format: "int32"
        description: "Used to determine if this component can be shared amongst different\
          \ DCAE services"
  DCAEServiceGroupByResultsPropertyValues:
    type: "object"
    properties:
      count:
        type: "integer"
        format: "int32"
      propertyValue:
        type: "string"
      dcaeServiceQueryLink:
        description: "Link.title is the DCAE service property value. Following this\
          \ link will provide a list of DCAE services that all have this property\
          \ value."
        $ref: "#/definitions/Link"
  DCAEServiceGroupByResults:
    type: "object"
    properties:
      propertyName:
        type: "string"
        description: "Property name of DCAE service that the group by operation was\
          \ performed on"
      propertyValues:
        type: "array"
        items:
          $ref: "#/definitions/DCAEServiceGroupByResultsPropertyValues"
  InlineResponse200:
    type: "object"
    properties:
      links:
        $ref: "#/definitions/InlineResponse200Links"
      totalCount:
        type: "integer"
        format: "int32"
      items:
        type: "array"
        items:
          $ref: "#/definitions/DCAEServiceType"
  DCAEServiceRequest:
    type: "object"
    required:
    - "components"
    - "typeId"
    - "vnfId"
    - "vnfLocation"
    - "vnfType"
    properties:
      typeId:
        type: "string"
        description: "Id of the associated DCAE service type"
      vnfId:
        type: "string"
        description: "Id of the associated VNF that this service is monitoring"
      vnfType:
        type: "string"
        description: "The type of the associated VNF that this service is monitoring"
      vnfLocation:
        type: "string"
        description: "Location identifier of the associated VNF that this service\
          \ is monitoring"
      deploymentRef:
        type: "string"
        description: "Reference to a Cloudify deployment"
      components:
        type: "array"
        description: "List of DCAE service components that this service is composed\
          \ of"
        items:
          $ref: "#/definitions/DCAEServiceComponentRequest"
  InlineResponse200Links:
    type: "object"
    properties:
      previousLink:
        $ref: "#/definitions/Link"
      nextLink:
        $ref: "#/definitions/Link"
    description: "Pagination links"
  ApiResponseMessage:
    type: "object"
    properties:
      code:
        type: "integer"
        format: "int32"
      type:
        type: "string"
      message:
        type: "string"
  DCAEService:
    type: "object"
    properties:
      serviceId:
        type: "string"
      selfLink:
        description: "Link.title is serviceId"
        $ref: "#/definitions/Link"
      created:
        type: "string"
        format: "date-time"
      modified:
        type: "string"
        format: "date-time"
      typeLink:
        description: "Link.title is typeId"
        $ref: "#/definitions/Link"
      vnfId:
        type: "string"
      vnfLink:
        description: "Link.title is vnfId"
        $ref: "#/definitions/Link"
      vnfType:
        type: "string"
      vnfLocation:
        type: "string"
        description: "Location information of the associated VNF"
      deploymentRef:
        type: "string"
        description: "Reference to a Cloudify deployment"
      components:
        type: "array"
        items:
          $ref: "#/definitions/DCAEServiceComponent"
  InlineResponse2001:
    type: "object"
    properties:
      links:
        $ref: "#/definitions/InlineResponse200Links"
      totalCount:
        type: "integer"
        format: "int32"
      items:
        type: "array"
        items:
          $ref: "#/definitions/DCAEService"
  UriBuilder:
    type: "object"
  Link:
    type: "object"
    properties:
      title:
        type: "string"
      rel:
        type: "string"
      uri:
        type: "string"
        format: "uri"
      uriBuilder:
        $ref: "#/definitions/UriBuilder"
      rels:
        type: "array"
        items:
          type: "string"
      params:
        type: "object"
        additionalProperties:
          type: "string"
      type:
        type: "string"
  DCAEServiceComponent:
    type: "object"
    required:
    - "componentId"
    - "componentLink"
    - "componentSource"
    - "componentType"
    - "created"
    - "modified"
    - "shareable"
    properties:
      componentId:
        type: "string"
        description: "The id format is unique to the source"
      componentLink:
        description: "Link to the underlying resource of this component"
        $ref: "#/definitions/Link"
      created:
        type: "string"
        format: "date-time"
      modified:
        type: "string"
        format: "date-time"
      componentType:
        type: "string"
      componentSource:
        type: "string"
        description: "Specifies the name of the underying source service that is responsible\
          \ for this components"
        enum:
        - "DCAEController"
        - "DMaaPController"
      status:
        type: "string"
      location:
        type: "string"
        description: "Location information of the component"
      shareable:
        type: "integer"
        format: "int32"
        description: "Used to determine if this component can be shared amongst different\
          \ DCAE services"
  DCAEServiceType:
    type: "object"
    required:
    - "blueprintTemplate"
    - "created"
    - "owner"
    - "selfLink"
    - "typeId"
    - "typeName"
    - "typeVersion"
    properties:
      owner:
        type: "string"
      typeName:
        type: "string"
        description: "Descriptive name for this DCAE service type"
      typeVersion:
        type: "integer"
        format: "int32"
        description: "Version number for this DCAE service type"
      blueprintTemplate:
        type: "string"
        description: "String representation of a Cloudify blueprint with unbound variables"
      serviceIds:
        type: "array"
        description: "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."
        items:
          type: "string"
      vnfTypes:
        type: "array"
        items:
          type: "string"
      serviceLocations:
        type: "array"
        description: "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."
        items:
          type: "string"
      asdcServiceId:
        type: "string"
        description: "Id of service this DCAE service type is associated with. Value\
          \ source is from ASDC's notification event's field `serviceInvariantUUID`."
      asdcResourceId:
        type: "string"
        description: "Id of vf/vnf instance this DCAE service type is associated with.\
          \ Value source is from ASDC's notification event's field `resourceInvariantUUID`."
      asdcServiceURL:
        type: "string"
        description: "URL to the ASDC service model"
      typeId:
        type: "string"
        description: "Unique identifier for this DCAE service type"
      selfLink:
        description: "Link to self where the Link.title is typeName"
        $ref: "#/definitions/Link"
      created:
        type: "string"
        format: "date-time"
        description: "Created timestamp for this DCAE service type in epoch time"
      deactivated:
        type: "string"
        format: "date-time"
        description: "Deactivated timestamp for this DCAE service type in epoch time"