...
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 |
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 |
---|---|---|---|---|---|
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. |
Candidates Object
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 |
---|---|---|---|---|---|
identifierType | Y | 1 | String | service_instance_id, vnf_name, cloud_region_idserviceInstanceId, 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 |
---|---|---|---|---|---|
serviceInstanceId | Y | 1 | String | A service instance id associated with a request. | |
serviceModelInfomodelInfo | 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 |
---|---|---|---|---|---|
licenseDemands | Y | 1..N | List of LicenseDemands Object | A list of resources for license selection. |
...
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 failurefailed. | |
requestStatus | Y | 1 | String | successaccepted, failurefailed | The status of a request. |
Asynchronous Response Header
...
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 failurefailed. | |
requestStatus | Y | 1 | String | successcompleted, failurefailed, pending | The status of a request. |
solutions | Y | 1 | Solution Object | Solutions related to a request. |
...
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 |
...
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. | |||||||||
identifierTypesolution | Y | 1 | String | service_instance_id, cloud_region_id | The type of a candidate. | identifier | Y | 1 | String | The id of a candidate. | Candidates Object | The placement solution | |
assignmentInfo | N | 1..N | List of AssignmentInfo object | Additional information related to a candidate. |
...
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", "requestId": "yyy-yyy-yyyy", "callbackUrl": "https://sowiki.onap.org:5000/callbackUrl/", "sourceId": "SO", "requestType": "create", "numSolutions": 1, "optimizers": ["placement"], "timeout": 600 }, "placementInfo": { "requestParameters": { "customerLatitude": 32.89748, "customerLongitude": -97.040443, "customerName": "xyz" }, "placementDemandssubscriberInfo": [ {"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" }, }, "existingCandidates": { "identifierType": "service_instance_id", "identifiers { "resourceModuleName": ["87257b49-9602-4ca1-9817-094e52bc873b"] }"vG", "excludedCandidatesserviceResourceId": { "identifierType": "service_instance_id", "identifiers": ["1ac71fb8-ad43-4e16-9459-c3f372b8236d"] }71d563e8-e714-4393-8f99-cc480144a05e", "requiredCandidatestenantId": { "identifierType": "service_instance_id", "identifiers": ["7e6c3e57-62cd-44f6-aa88-d0896998f7ec"] }vG-tenant", "resourceModelInfo": { }, "modelInvariantId": "vG-modelInvariantId", { "resourceModuleNamemodelVersionId": "vG-versionId", "serviceResourceIdmodelName": "71d563e8-e714-4393-8f99-cc480144a05evG-model", "tenantIdmodelType": "vG-tenantresource", "resourceModelInfo": { "modelInvariantId "modelVersion": "vG-modelInvariantId1.0", "modelVersionIdmodelCustomizationName": "vG-versionIdcustomeModelName", "modelName }, "existingCandidates": "vG-model",[ "modelType { "identifierType": "resourceserviceInstanceId", "modelVersion "cloudOwner": "1.0", "modelCustomizationName "identifiers": ["vG-customeModelName" gjhd-098-fhd-987"] } }, "existingCandidates": { "identifierType": "service_instance_id", ], "excludedCandidates": [ { "identifierType": "serviceInstanceId", "cloudOwner": "", "identifiers": ["21d5f3e8gjhd-e714098-4383fhd-8f99-cc480144505a987"] }, "excludedCandidates": { "identifierType { "identifierType": "vimId", "cloudOwner": "service_instance_idvmware", "identifiers": ["1ac71fb8-ad43-4e16-9459-c3f372b8236dNYMDT67"] }, ], "requiredCandidates": {[ "identifierType": "cloud_region_id", " { "identifierType": "vimId", "cloudOwner": "amazon", "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" } }, "licenseDemandslicenseInfo": [{ { "licenseDemands": [ "resourceModuleName": "vGMuxInfra",{ "serviceResourceIdresourceModuleName": "vGMuxInfra-xx", "tenantIdserviceResourceId": "vGMuxInfra-tenantxx", "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": "1ac71fb8-ad43-4e16-9459-c3f372b8236d" "identifiers": ["gjhd-098-fhd-987"] }, "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_idsomeResourceId", "identifierTypesolution": "cloud_region_id",{ "identifieridentifierType": "2ac71fb8-ad43-4e16-9459-c3f372b8236dcloudRegionId", " "cloudOwner": "amazon", "identifiers": ["gjhd-098-fhd-987"] }, "assignmentInfo": [ { "key": "cloudOwner", "value": "amazon" }, { "key": "cloud_region_idcloudRegionId", "value": "1ac71fb8-ad43-4e16-9459-c3f372b8236d" } ] } ] ], "licenseSolutions": [ { "resourceModuleName": "vGMuxInfra", "serviceResourceId": "some_resource_idsomeResourceId", "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": [
{"attribute":"locationId", "value": "orderInfo.customerLocation"},
{"attribute":"id", "value": "orderInfo.vpnInfo"},
{"attribute":"upstreamBW", "value": "orderInfo,vpnInfo"}
],
"policyScope": ["vCPE", "US", "INTERNATIONAL", "ip", "vGMuxInfra", "vG"],
"type": "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)
...