OOF/HAS API Specifications

OOF/HAS Create/Update API

Interface Defintion

Description

Interface Defintion

Description

URI

https://{host}:{port}/api/oof/v1/placement

Operation Type

POST

Content-Type

application/json

Request Header

Header Name

Required?

Description

Header Name

Required?

Description

Accept

N

Determines the format of the body of the response. Valid value is “application/json”

Authorization

Y

Supplies Basic Authentication credentials for the request. If the Authorization header is missing, then an HTTP 400 Invalid Request response is returned. If the string supplied is invalid, then an HTTP 401 Unauthorized response is returned.

Content-Type

Y

Determines the format of the request content. Only application/json is supported.

Content-Length

N

Number of bytes in the body of the request. Note that content length is limited to 1 MB.

Request Body

Attribute

Required?

Cardinality

Content

Values

Description

Attribute

Required?

Cardinality

Content

Values

Description

requestInfo

Y

1

RequestInfo Object



The content of the RequestInfo object.

placementInfo

Y

1

PlacementInfo Object



The Content of the PlacementInfo object.

licenseInfo

N

1

LicenseInfo Object



The Content of the LicenseInfo object.

serviceInfo

Y

1

ServiceInfo Object



The Content of the ServiceInfo object.

RequestInfo Object

Attribute

Required?

Cardinality

Content

Values

Description

Attribute

Required?

Cardinality

Content

Values

Description

transactionId

Y

1

UUID/String



A unique ID to track an ONAP transaction.

requestId

Y

1

UUID/String



A unique ID to track multiple requests associated with a transaction.

callbackUrl

Y

1

URL



The end point of a callback service where recommendations are posted.

callbackHeader

N

1

JSON blob



The header information a client expecting in a async callback.

sourceId

Y

1

String



The unique ID of a client making an optimization call.

requestType

Y

1

String

create, update, delete

The type of a request

numSolutions

N

1

Integer



Expected number of solutions. numSolution can also be specified using an optimization query policies, where the default configured value is 1. The value from a request gets higher precedence over the value defined in a policy.

optimizers

Y

1..N

List of Strings

placement

A list of optimization services.

timeout

N

1

Integer



A tolerance window (in secs) for expecting solutions. Default is 600 secs.

PlacementInfo Object

Attribute

Required?

Cardinality

Content

Values

Description

Attribute

Required?

Cardinality

Content

Values

Description

requestParameters

C

1

JSON BLOB



A JSON object conaining service and customer-specific data. A client or service designer is required to specify the parameters of interest for a given service and their location in the JSON blob through optimization query policies. This attribute is only required if a request contains service or customer-specific information.

placementDemands

Y

1..N

List of PlacementDemand Object



The resource information for a placement service.

subscriberInfo

N

1

SubscriberInfo Object



The information of a service subscriber.

PlacementDemand Object

Attribute

Required?

Cardinality

Content

Values

Description

Attribute

Required?

Cardinality

Content

Values

Description

resourceModuleName

Y

1

String



A resource name as defined in a service model.

serviceResourceId

Y

1

String



A unique resource Id with a local scope between client and OOF.

tenantId

N

1

String



A tenant Id as defined in the ordering system.

resourceModelInfo

Y

1

ModelMetaData Object



Resource model information as defined in SDC.

existingCandidates

N

1..N

List of Candidates Objects



The existing placement information of a resource.

excludedCandidates

N

1..N

List of Candidates Objects



Candidates that need to be excluded from solutions.

requiredCandidates

N

1..N

List of Candidates Objects



Candidates that must be included in solutions.

SubscriberInfo Object

Attribute

Required?

Cardinality

Content

Values

Description

Attribute

Required?

Cardinality

Content

Values

Description

globalSubscriberId

Y

1

String



An ID of a subscriber.

subscriberName

Y

1.

String



The name of a subscriber. If the name is not known, the value must be 'unknown'.

subscriberCommonSiteId

N

1

String



Id representing a subscriber location.

ModelMetaData Object

Attribute

Required?

Cardinality

Content

Values

Description

Attribute

Required?

Cardinality

Content

Values

Description

modelInvariantId

Y

1

String



A model invariant Id as defined in a service model.

modelVersionId

Y

1

String



A unique model Id as defined in a service model.

modelName

N

1

String



A model name as defined in a service model.

modelType

N

1

String



A model type as defined in a service model.

modelVersion

N

1

String



A model version as defined in a service model.

modelCustomizationName

N

1

String



A model customization name as defined in a service model.

Candidates Object

Attribute

Required?

Cardinality

Content

Values

Description

Attribute

Required?

Cardinality

Content

Values

Description

identifierType

Y

1

String

serviceInstanceId, vnfName, cloudRegionId, vimId

The type of a candidate.

identifiers

Y

1..N

List of Strings



A list of identifiers.

cloudOwner

C

1

String



The name of a cloud owner. Only required if identifierType is cloud_region_id.

ServiceInfo Object

Attribute

Required?

Cardinality

Content

Values

Description

Attribute

Required?

Cardinality

Content

Values

Description

serviceInstanceId

Y

1

String



A service instance id associated with a request.

modelInfo

Y

1

ModelMetaData Object



A list of identifiers.

serviceName

Y

1

String



The name of a service.

LicenseInfo Object

Attribute

Required?

Cardinality

Content

Values

Description

Attribute

Required?

Cardinality

Content

Values

Description

licenseDemands

Y

1..N

List of LicenseDemands Object



A list of resources for license selection.

LicenseDemands Object

Attribute

Required?

Cardinality

Content

Values

Description

Attribute

Required?

Cardinality

Content

Values

Description

resourceModuleName

Y

1

String



A resource name as defined in a service model.

serviceResourceId

Y

1

String



A unique resource Id with a local scope between client and OOF.

resourceModelInfo

Y

1

ModelMetaData Object



Resource model information as defined in a service model.

existingLicenses

N

1

LicenseModel Object



Existing license information assigned to a resource.

LicenseModel Object

Attribute

Required?

Cardinality

Content

Values

Description

Attribute

Required?

Cardinality

Content

Values

Description

entitlementPoolUUID

Y

1..N

List of Strings



Entitlement pool UUIDs associated with a resource.

licenseKeyGroupUUID

Y

1..N

List of Strings



License key groups associated with a resource.

Synchronous Response Body

Attribute

Required?

Cardinality

Content

Values

Description

Attribute

Required?

Cardinality

Content

Values

Description

requestId

Y

1

UUID/String



A unique Id for an ONAP transaction.

transactionId

Y

1

UUID/String



A unique ID to track multiple requests associated with a transaction.

statusMessage

N

1

String



Reasoning if a requestStatus is failed.

requestStatus

Y

1

String

accepted, failed

The status of a request.

Asynchronous Response Header

Header Name

Required?

Description

Header Name

Required?

Description

Accept

N

Determines the format of the body of the response. Valid value is “application/json”

Authorization

Y

Supplies Basic Authentication credentials for the request. If the Authorization header is missing, then an HTTP 400 Invalid Request response is returned. If the string supplied is invalid, then an HTTP 401 Unauthorized response is returned.

Content-Type

Y

Determines the format of the request content. Only application/json is supported.

Attribute

N

Attribute and respecrtive value that a client has sent in the callbackHeader field of a requerst.

Content-Length

N

Number of bytes in the body of the request. Note that content length is limited to 1 MB.

Asynchronous Response Body

Attribute

Required?

Cardinality

Content

Values

Description

Attribute

Required?

Cardinality

Content

Values

Description

requestId

Y

1

UUID/String



A unique Id for an ONAP transaction.

transactionId

Y

1

UUID/String



A unique ID to track multiple requests associated with a transaction.

statusMessage

N

1

String



Reasoning if requestStatus is failed.

requestStatus

Y

1

String

completed, failed, pending

The status of a request.

solutions

Y

1

Solution Object



Solutions related to a request.

Solution Object

Attribute

Required?

Cardinality

Content

Values

Description

Attribute

Required?

Cardinality

Content

Values

Description

placementSolutions

Y

1..N

List of ComprehensiveSolution Object



A list of placement solutions.

licenseSolutions

Y

1..N

List of LicenseSolution Object



A list of license solutions

ComprehensiveSolution Object

Attribute

Required?

Cardinality

Content

Values

Description

Attribute

Required?

Cardinality

Content

Values

Description

-

Y

1..N

List of PlacementSolution Object



A list of placement solutions.

PlacementSolution Object

Attribute

Required?

Cardinality

Content

Values

Description

Attribute

Required?

Cardinality

Content

Values

Description

resourceModuleName

Y

1

String



The name of a resource as defined in the service model.

serviceResourceId

Y

1

String



A resource Id as defined in a service model.

solution

Y

1

Candidates Object



The placement solution

assignmentInfo

N

1..N

List of AssignmentInfo object



Additional information related to a candidate.

AssignmentInfo Object

Attribute

Required?

Cardinality

Content

Values

Description

Attribute

Required?

Cardinality

Content

Values

Description

key

Y

1

String



An attribute name.

value

Y

1

String



An attribute value.

LicenseSolutions Object

Attribute

Required?

Cardinality

Content

Values

Description

Attribute

Required?

Cardinality

Content

Values

Description

resourceModuleName

Y

1

String



A resource name as defined in a service.

serviceResourceId

Y

1

String



A resource Id as defined in a service.

entitlementPoolUUID

Y

1..N

List of String



A list of entitlementPoolUUIDs.

licenseKeyGroupUUID

Y

1..N

List of String



A list of licenseKeyGroupUUID.

entitlementPoolInvariantUUID

Y

1..N

List of String



A list of entitlementPoolInvariantUUID .

licenseKeyGroupInvariantUUID

Y

1..N

List of String



A list of licenseKeyGroupInvariantUUID .

HTTP Response Code

HTTP Code

Response Phrase

Description

HTTP Code

Response Phrase

Description

201

Created

An optimization solution is found.

202

Accepted

An optimization request is accepted.

400

Bad request

Bad request.

401

Unauthorized

Request body is not compliant with the API definition.

404

Not found

The server cannot find the requested URI.

405

Method not found

The requested method is not supported by a server.

500

Internal server error

The server encountered an internal server error or timed out.

520

Solver error

Requested number of solutions cannot be found.

Request Example



SO-OOF/HAS Request Example
{ "requestInfo": { "transactionId": "xxx-xxx-xxxx", "requestId": "yyy-yyy-yyyy", "callbackUrl": "https://wiki.onap.org:5000/callbackUrl/", "sourceId": "SO", "requestType": "create", "numSolutions": 1, "optimizers": ["placement"], "timeout": 600 }, "placementInfo": { "requestParameters": { "customerLatitude": 32.89748, "customerLongitude": -97.040443, "customerName": "xyz" }, "subscriberInfo": {"globalSubscriberId": "xxx-xx-xxx", "subscriberName": "subscriber_x"}, "placementDemands": [ { "resourceModuleName": "vGMuxInfra", "serviceResourceId": "vGMuxInfra-xx", "tenantId": "vGMuxInfra-tenant", "resourceModelInfo": { "modelInvariantId": "vGMuxInfra-modelInvariantId", "modelVersionId": "vGMuxInfra-versionId", "modelName": "vGMuxInfra-model", "modelType": "resource", "modelVersion": "1.0", "modelCustomizationName": "vGMuxInfra-customeModelName" } }, { "resourceModuleName": "vG", "serviceResourceId": "71d563e8-e714-4393-8f99-cc480144a05e", "tenantId": "vG-tenant", "resourceModelInfo": { "modelInvariantId": "vG-modelInvariantId", "modelVersionId": "vG-versionId", "modelName": "vG-model", "modelType": "resource", "modelVersion": "1.0", "modelCustomizationName": "vG-customeModelName" }, "existingCandidates": [ { "identifierType": "serviceInstanceId", "cloudOwner": "", "identifiers": ["gjhd-098-fhd-987"] } ], "excludedCandidates": [ { "identifierType": "serviceInstanceId", "cloudOwner": "", "identifiers": ["gjhd-098-fhd-987"] }, { "identifierType": "vimId", "cloudOwner": "vmware", "identifiers": ["NYMDT67"] } ], "requiredCandidates": [ { "identifierType": "vimId", "cloudOwner": "amazon", "identifiers": ["TXAUS219"] } ] } ] }, "serviceInfo": { "serviceInstanceId": "d61b2543-5914-4b8f-8e81-81e38575b8ec", "serviceName": "vCPE", "modelInfo": { "modelInvariantId": "vCPE-invariantId", "modelVersionId": "vCPE-versionId", "modelName": "vCPE-model", "modelType": "service", "modelVersion": "1.0", "modelCustomizationName": "vCPE-customeModelName" } }, "licenseInfo": { "licenseDemands": [ { "resourceModuleName": "vGMuxInfra", "serviceResourceId": "vGMuxInfra-xx", "resourceModelInfo": { "modelInvariantId": "vGMuxInfra-modelInvariantId", "modelVersionId": "vGMuxInfra-versionId", "modelName": "vGMuxInfra-model", "modelType": "resource", "modelVersion": "1.0", "modelCustomizationName": "vGMuxInfra-customeModelName" }, "existingLicenses": { "entitlementPoolUUID": ["87257b49-9602-4ca1-9817-094e52bc873b", "43257b49-9602-4fe5-9337-094e52bc9435"], "licenseKeyGroupUUID": ["87257b49-9602-4ca1-9817-094e52bc873b", "43257b49-9602-4fe5-9337-094e52bc9435"] } } ] } }

Synchronous Response Example



SO-OOF/HAS Response Example
{ "transactionId": "xxx-xxx-xxxx", "requestId": "yyy-yyy-yyyy", "requestStatus": "accepted", "statusMessage": "" }

Asynchronous Response Example



SO-OOF/HAS Response Example
{ "transactionId": "xxx-xxx-xxxx", "requestId": "yyy-yyy-yyyy", "requestStatus": "completed", "statusMessage": "", "solutions": { "placementSolutions": [ [ { "resourceModuleName": "vGMuxInfra", "serviceResourceId": "someResourceId", "solution": { "identifierType": "serviceInstanceId", "identifiers": ["gjhd-098-fhd-987"] }, "assignmentInfo": [ { "key": "cloudOwner", "value": "amazon" }, { "key": "vnfHostName", "value": "ahr344gh" }, { "key": "isRehome", "value": "False" }, { "key": "cloudRegionId", "value": "1ac71fb8-ad43-4e16-9459-c3f372b8236d" } ] }, { "resourceModuleName": "vG", "serviceResourceId": "someResourceId", "solution": { "identifierType": "cloudRegionId", "cloudOwner": "amazon", "identifiers": ["gjhd-098-fhd-987"] }, "assignmentInfo": [ { "key": "cloudOwner", "value": "amazon" }, { "key": "cloudRegionId", "value": "1ac71fb8-ad43-4e16-9459-c3f372b8236d" } ] } ] ], "licenseSolutions": [ { "resourceModuleName": "vGMuxInfra", "serviceResourceId": "someResourceId", "entitlementPoolUUID": ["1ac71fb8-ad43-4e16-9459-c3f372b8236d", "834fc71fb8-ad43-4fh7-9459-c3f372b8236f"], "licenseKeyGroupUUID": ["1ac71fb8-ad43-4e16-9459-c3f372b8236d", "834fc71fb8-ad43-4fh7-9459-c3f372b8236f"], "entitlementPoolInvariantUUID": ["1ac71fb8-ad43-4e16-9459-c3f372b8236d", "834fc71fb8-ad43-4fh7-9459-c3f372b8236f"], "licenseKeyGroupInvariantUUID": ["1ac71fb8-ad43-4e16-9459-c3f372b8236d", "834fc71fb8-ad43-4fh7-9459-c3f372b8236f"] } ] } }

Optimization Query Policies

To enable service-agnostic API for the OOF/HAS application, the requestParameters object is modeled as JSON blob. An OOF/HAS client is expected to send service-specific and customer-specific information in a JSON format. The API allows a client to define any object structure in a JSON blob; however, the naming conventions used in the JSON blob must be the same as defined in a service model or customer order. Which information of a JSON blob is relevant for a service and where the information is located in the JSON blob should be captured through query policies. The location of an object in a JSON blob can be specified using an xpath with dot notations as shown in the following example. These optimization query policies can be configured by either a service provider or a client.

Optimization Query Policy Example
requestParameter JSON blob Example



OOF/HAS API document (pdf format)