...
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 | YN | 1 | Integer | A tolerance window (in secs) for expecting solutions. Default is 600 secs. |
PlacementInfo Object
Attribute | Required? | Cardinality | Content | Values | Description |
---|---|---|---|---|---|
requestParameters | YC | 1 | JSON BLOB | A JSON object conaining service and customer-specific data. A client or service designer is required to specify the location of information 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 |
---|---|---|---|---|---|
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 ObjectObjects | The existing placement information of a resource. | |
excludedCandidates | N | 1..N | List of Candidates ObjectObjects | Candidates that need to be excluded from solutions. | |
requiredCandidates | N | 1..N | List of Candidates ObjectObjects | Candidates that must be included in solutions. |
...
SubscriberInfo Object
Attribute | Required? | Cardinality | Content | Values | Description |
---|
globalSubscriberId | Y | 1 | String |
A model invariant Id as defined in a service model.
An ID of a subscriber. | |||
subscriberName | Y | 1. | String |
A unique model Id as defined in a service model.
modelType
The name of a subscriber. If the name is not known, the value must be 'unknown'. | |||
subscriberCommonSiteId | N | 1 | String |
A model name as defined in a service model.
Id representing a subscriber location. |
ModelMetaData Object
Attribute | Required? | Cardinality | Content | Values | Description |
---|---|---|---|---|---|
modelInvariantId | Y | 1 | String | A model type invariant Id as defined in a service model. | |
modelVersionmodelVersionId | NY | 1 | String | A unique model version Id as defined in a service model. | |
modelCustomizationNamemodelName | N | 1 | String | A model customization name as defined in a service model. |
...
modelType |
N |
1 |
identifierType
Y
String | A model type as defined in a service model. | ||
modelVersion | N | 1 | String |
service_instance_id, vnf_name, cloud_region_id
The type of a candidate.
identifiers
Y
1..N
List of Strings
A list of identifiers.
...
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 | |
---|---|---|---|---|---|---|
serviceInstanceIdidentifierType | Y | 1 | String | A service instance id associated with a request. | serviceModelInfoserviceInstanceId, vnfName, cloudRegionId, vimId | The type of a candidate. |
identifiers | Y | 1ModelMetaData Object..N | List of Strings | A list of identifiers. |
...
cloudOwner |
licenseDemands
Y
1..N
List of LicenseDemands Object
A list of resources for license selection.
...
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 |
---|
serviceInstanceId | Y | 1 | String | A |
serviceResourceId
Y
1
String
A unique resource Id with a local scope between client and OOF.
service instance id associated with a request. | |||
modelInfo | Y | 1 | ModelMetaData Object |
A list of identifiers. |
serviceName |
Y | 1 |
LicenseModel Object
Existing license information assigned to a resource.
...
String | The name of a service. |
LicenseInfo Object
Attribute | Required? | Cardinality | Content | Values | Description |
---|
licenseDemands | Y | 1..N | List of |
Entitlement pool UUIDs associated with a resource.
licenseKeyGroupUUID
Y
1..N
List of Strings
License key groups associated with a resource.
Synchronous Response Body
LicenseDemands Object | A list of resources for license selection. |
LicenseDemands Object
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 |
String
Reasoning if a requestStatus is failure.
requestStatus
ModelMetaData Object | Resource model information as defined in a service model. | |
existingLicenses | N | 1 |
String
success, failure
The status of a request.
Asynchronous Response Header
LicenseModel Object | Existing license information assigned to a resource. |
LicenseModel Object
Attribute | Required? | Cardinality | Content | Values | Description |
---|
Accept
entitlementPoolUUID | Y | 1..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.
...
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 |
---|---|---|---|---|---|
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. |
solutions
Y
1
Solution Object
Solutions related to a request.
Solution Object
...
Asynchronous Response Header
Header Name | Required? | Description |
---|
Accept |
Y
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
...
Y
...
1..N
...
List of PlacementSolution Object
...
A list of placement solutions.
...
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 |
---|
requestId | Y | 1 |
String
The name of a resource as defined in the service model.
UUID/String | A unique Id for an ONAP transaction. | ||||
transactionId | Y | 1 | UUID/String | A |
solution
unique ID to track multiple requests associated with a transaction. | ||
statusMessage | N | 1 |
Candidates Object
The placement solution
assignmentInfo
N
1..N
List of AssignmentInfo object
Additional information related to a candidate.
...
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 | |||
---|---|---|---|---|---|---|---|---|
keyplacementSolutions | Y | 1 | String | An attribute name. | value..N | List of ComprehensiveSolution Object | A list of placement solutions. | |
licenseSolutions | Y | 1 | String | An attribute value. |
...
..N | List of LicenseSolution Object | A list of license solutions |
ComprehensiveSolution Object
Attribute | Required? | Cardinality | Content | Values | Description |
---|
- | Y | 1 |
String
..N | List of PlacementSolution Object | A list of placement solutions. |
PlacementSolution Object
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. | |||||
entitlementPoolUUIDsolution | Y | 1..N | List of String | A list of entitlementPoolUUIDs. | licenseKeyGroupUUID | Y | Candidates Object | The placement solution | |
assignmentInfo | N | 1..N | List of String | A list of licenseKeyGroupUUID. | entitlementPoolInvariantUUIDAssignmentInfo object | Additional information related to a candidate. |
AssignmentInfo Object
Attribute | Required? | Cardinality | Content | Values | Description |
---|---|---|---|---|---|
key | Y | 1 |
String |
An attribute name. |
value | Y | 1 |
String |
An attribute value. |
HTTP Response Code
...
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.
...
Request Example
...
language | js |
---|---|
theme | Eclipse |
title | SO-OOF/HAS Request Example |
linenumbers | true |
collapse | true |
...
LicenseSolutions Object
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 |
---|---|---|
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
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
{ "requestInfo": { "transactionId": "xxx-xxx-xxxx", "optimizersrequestId": ["placementyyy-yyy-yyyy"], "timeoutcallbackUrl": 600"https://wiki.onap.org:5000/callbackUrl/", }, "sourceId": "placementInfoSO":, { "requestParametersrequestType": { "customerLatitude": 32.89748, "customerLongitudecreate", "numSolutions": -97.0404431, "customerNameoptimizers": ["xyzplacement"], }, "placementDemandstimeout": [600 }, { "placementInfo": { "resourceModuleNamerequestParameters": { "vGMuxInfracustomerLatitude": 32.89748, "serviceResourceId"customerLongitude": -97.040443, "customerName": "vGMuxInfra-xxxyz" }, "tenantId"subscriberInfo": {"globalSubscriberId": "vGMuxInfraxxx-xx-tenantxxx", "subscriberName": "subscriber_x"}, "resourceModelInfoplacementDemands": {[ { "modelInvariantIdresourceModuleName": "vGMuxInfra-modelInvariantId", "modelVersionIdserviceResourceId": "vGMuxInfra-versionIdxx", "modelNametenantId": "vGMuxInfra-modeltenant", "modelTyperesourceModelInfo": "resource",{ "modelVersionmodelInvariantId": "1.0vGMuxInfra-modelInvariantId", "modelCustomizationNamemodelVersionId": "vGMuxInfra-customeModelNameversionId", },"modelName": "vGMuxInfra-model", "existingCandidatesmodelType": { "identifierType": "service_instance_id", "identifiersresource", "modelVersion": ["87257b49-9602-4ca1-9817-094e52bc873b"] },"1.0", "excludedCandidatesmodelCustomizationName": { "identifierType": "service_instance_id", "identifiers": ["1ac71fb8-ad43-4e16-9459-c3f372b8236d"] }vGMuxInfra-customeModelName" } }, { "resourceModuleName": "vG", "serviceResourceId": "71d563e8-e714-4393-8f99-cc480144a05e", "requiredCandidatestenantId": { "identifierType": "service_instance_id", "identifiers": ["7e6c3e57-62cd-44f6-aa88-d0896998f7ec"] }"vG-tenant", }, "resourceModelInfo": { { "resourceModuleNamemodelInvariantId": "vG-modelInvariantId", "serviceResourceIdmodelVersionId": "71d563e8-e714-4393-8f99-cc480144a05evG-versionId", "tenantIdmodelName": "vG-tenantmodel", "resourceModelInfomodelType": {"resource", "modelInvariantIdmodelVersion": "vG-modelInvariantId1.0", "modelVersionIdmodelCustomizationName": "vG-versionIdcustomeModelName", }, "modelNameexistingCandidates": "vG-model",[ { "modelTypeidentifierType": "resourceserviceInstanceId", "modelVersioncloudOwner": ""1.0", "modelCustomizationNameidentifiers": ["vG-customeModelName" gjhd-098-fhd-987"] } }], "existingCandidatesexcludedCandidates": [ { "identifierType": "service_instance_idserviceInstanceId", "identifierscloudOwner": ["21d5f3e8-e714-4383-8f99-cc480144505a"] }, "excludedCandidates": { "identifierType": "service_instance_id", "", "identifiers": ["gjhd-098-fhd-987"] }, { "identifierType": "vimId", "cloudOwner": "vmware", "identifiers": ["1ac71fb8-ad43-4e16-9459-c3f372b8236dNYMDT67"] }, ], "requiredCandidates": [ { "identifierType": "vimId", "cloudOwner": "cloud_region_idamazon", "identifiers": ["TXAUS219"] } ] } ] }, "serviceInfo": { "serviceInstanceId": "d61b2543-5914-4b8f-8e81-81e38575b8ec", "serviceName": "vCPE", "serviceModelInfomodelInfo": { "modelInvariantId": "vCPE-invariantId", "modelVersionId": "vCPE-versionId", "modelName": "vCPE-model", "modelType": "service", "modelVersion": "1.0", "modelCustomizationName": "vCPE-customeModelName" } }, "licenseInfo": { "licenseDemands": [ { "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" }, "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
...
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
{ "transactionId": "xxx-xxx-xxxx", "requestId": "yyy-yyy-yyyy", "requestStatus": "completedaccepted", "statusMessage": "Success!" } |
Asynchronous Response Example
...
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
{ "transactionId": "xxx-xxx-xxxx", "requestId": "yyy-yyy-yyyy", "requestStatus": "completed", "statusMessage": "Success!", "solutions": { "placementSolutions": [ [ { "resourceModuleName": "vGMuxInfra", "serviceResourceId": "some_resource_idsomeResourceId", "solution": { "identifierType": "service_instance_idserviceInstanceId", "identifier "identifiers": ["1ac71fb8gjhd-ad43098-4e16fhd-9459-c3f372b8236d987"] }, "assignmentInfo": [ { "key": "cloudOwner", "value": "amazon" }, { "key": "vnfHostName", "value": "ahr344gh" }, { "key": "isRehome", "value": "False" }, { "key": "cloud_region_idcloudRegionId", "value": "1ac71fb8-ad43-4e16-9459-c3f372b8236d" } ] } ] }, { "resourceModuleName": "vG", "serviceResourceId": "some_resource_id", "solution": { "identifierType": "service_instance_id", "identifier": "1ac71fb8-ad43-4e16-9459-c3f372b8236d" } "assignmentInfo": [ { "key": "cloudOwner", "value": "amazon" }, , { "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.
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
{ "service": "optimizationQueryPolicy", "policyName": "oofBeijing.queryPolicy_vCPE", "description": "Optimization query policy for vCPE", "templateVersion": "0.0.1", "version": "oofBeijing", "priority": "3", "riskType": "test", "riskLevel": "2", "guard": "False", "content": { "queryProperties": [ { "keyattribute": "cloud_region_idlocationId", "value": "1ac71fb8-ad43-4e16-9459-c3f372b8236d" } orderInfo.customerLocation"}, ] {"attribute":"id", }"value": "orderInfo.vpnInfo"}, ], {"attribute":"upstreamBW", "licenseSolutionsvalue": ["orderInfo,vpnInfo"} ], { "resourceModuleName"policyScope": ["vGMuxInfravCPE", "serviceResourceId": "some_resource_id", "US", "INTERNATIONAL", "ip", "vGMuxInfra", "vG"], "entitlementPoolUUIDtype": ["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"] } ] "optimizationQueryPolicy" } } |
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
{
"orderInfo": {
"customerLocation": {
"latitude": "30.98",
"longitude": "34.23",
"locationId": "NJBD34"
},
"vpnInfo": {
[
"id": 200,
"upsteamBW": "10Gbps",
"downstreamBW": "100Gbps"
],
[
"id": 200,
"upsteamBW": "10Gbps",
"downstreamBW": "100Gbps"
]
}
}
} |
OOF/HAS API document (pdf format)
...