aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/.gitignore3
-rw-r--r--docs/_static/css/ribbon.css64
-rwxr-xr-xdocs/_static/favicon.icobin0 -> 2102 bytes
-rw-r--r--docs/_static/logo_onap_2017.pngbin0 -> 12278 bytes
-rw-r--r--docs/api/swagger/oof-optf-opteng-api.json584
-rw-r--r--docs/api/swagger/oof-osdf-has-api.json2155
-rw-r--r--docs/conf.py74
-rw-r--r--docs/index.rst3
-rw-r--r--docs/requirements-docs.txt9
-rw-r--r--docs/sections/architecture.rst1
-rw-r--r--docs/sections/offeredapis.rst25
-rw-r--r--docs/sections/release-notes.rst777
-rw-r--r--docs/sections/swaggerdoc/oof-osdf-has-api.json587
-rw-r--r--docs/sections/upgradestrategy.rst22
-rw-r--r--docs/tox.ini31
15 files changed, 3723 insertions, 612 deletions
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 0000000..43ca5b6
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,3 @@
+/.tox
+/_build/*
+/__pycache__/*
diff --git a/docs/_static/css/ribbon.css b/docs/_static/css/ribbon.css
new file mode 100644
index 0000000..db927a4
--- /dev/null
+++ b/docs/_static/css/ribbon.css
@@ -0,0 +1,64 @@
+.ribbon {
+ z-index: 1000;
+ background-color: #a00;
+ overflow: hidden;
+ white-space: nowrap;
+ position: fixed;
+ top: 25px;
+ right: -50px;
+ -webkit-transform: rotate(45deg);
+ -moz-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ -o-transform: rotate(45deg);
+ transform: rotate(45deg);
+ -webkit-box-shadow: 0 0 10px #888;
+ -moz-box-shadow: 0 0 10px #888;
+ box-shadow: 0 0 10px #888;
+
+ }
+
+ .ribbon a {
+ border: 1px solid #faa;
+ color: #fff;
+ display: block;
+ font: bold 81.25% 'Helvetica Neue', Helvetica, Arial, sans-serif;
+ margin: 1px 0;
+ padding: 10px 50px;
+ text-align: center;
+ text-decoration: none;
+ text-shadow: 0 0 5px #444;
+ transition: 0.5s;
+ }
+
+ .ribbon a:hover {
+ background: #c11;
+ color: #fff;
+ }
+
+
+ /* override table width restrictions */
+ @media screen and (min-width: 767px) {
+
+ .wy-table-responsive table td, .wy-table-responsive table th {
+ /* !important prevents the common CSS stylesheets from overriding
+ this as on RTD they are loaded after this stylesheet */
+ white-space: normal !important;
+ }
+
+ .wy-table-responsive {
+ overflow: visible !important;
+ }
+ }
+
+ @media screen and (max-width: 767px) {
+ .wy-table-responsive table td {
+ white-space: nowrap;
+ }
+ }
+
+ /* fix width of the screen */
+
+ .wy-nav-content {
+ max-width: 800px;
+ }
+ \ No newline at end of file
diff --git a/docs/_static/favicon.ico b/docs/_static/favicon.ico
new file mode 100755
index 0000000..cb712eb
--- /dev/null
+++ b/docs/_static/favicon.ico
Binary files differ
diff --git a/docs/_static/logo_onap_2017.png b/docs/_static/logo_onap_2017.png
new file mode 100644
index 0000000..5d064f4
--- /dev/null
+++ b/docs/_static/logo_onap_2017.png
Binary files differ
diff --git a/docs/api/swagger/oof-optf-opteng-api.json b/docs/api/swagger/oof-optf-opteng-api.json
new file mode 100644
index 0000000..4e77f76
--- /dev/null
+++ b/docs/api/swagger/oof-optf-opteng-api.json
@@ -0,0 +1,584 @@
+{
+ "swagger": "2.0",
+ "info": {
+ "description": "This is the ONAP Optimization Engine (Generic Solver) API",
+ "version": "1.0.0",
+ "title": "ONAP Optimization ENGINE API",
+ "contact": {
+ "email": "vikas.varma@att.com"
+ },
+ "license": {
+ "name": "Apache 2.0",
+ "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
+ }
+ },
+ "securityDefinitions": {
+ "basicAuth": {
+ "type": "basic",
+ "description": "HTTP Basic Auth"
+ }
+ },
+ "security": [
+ {
+ "basicAuth": []
+ }
+ ],
+ "paths": {
+ "/optengine/v1": {
+ "post": {
+ "tags": [
+ "Generic Solver Optimization"
+ ],
+ "summary": "Call the Generic Optimization engine",
+ "operationId": "optimizationRequest",
+ "description": "call optimization engine",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "parameters": [
+ {
+ "in": "body",
+ "name": "optimizationRequest",
+ "description": "optimization request",
+ "schema": {
+ "$ref": "#/definitions/OptimizationRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/OptimizationResponse"
+ }
+ },
+ "202": {
+ "description": "An optimization request is accepted"
+ },
+ "400": {
+ "description": "bad request"
+ },
+ "401": {
+ "description": "Request body is not compliant with the API definition"
+ },
+ "404": {
+ "description": "The server cannot find the requested URI"
+ },
+ "405": {
+ "description": "The requested method is not supported by a server."
+ },
+ "500": {
+ "description": "The server encountered an internal server error or timed out"
+ }
+ }
+ }
+ },
+ "/optmodel/v1": {
+ "post": {
+ "tags": [
+ "Request to add the Optimizer model, metadata"
+ ],
+ "summary": "Add/Insert the optimization models in the database",
+ "operationId": "optimModelRequestAPI",
+ "description": "Request to add update the Optimizer model, metadata",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "parameters": [
+ {
+ "in": "body",
+ "name": "optimModelRequest",
+ "description": "optimization model request",
+ "schema": {
+ "$ref": "#/definitions/OptimModelRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/OptimModelResponse"
+ }
+ },
+ "400": {
+ "description": "bad request"
+ },
+ "401": {
+ "description": "Request body is not compliant with the API definition"
+ },
+ "404": {
+ "description": "The server cannot find the requested URI"
+ },
+ "405": {
+ "description": "The requested method is not supported by a server."
+ },
+ "500": {
+ "description": "The server encountered an internal server error or timed out"
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "Request to update the Optimizer model, metadata"
+ ],
+ "summary": "Add/update the optimization models in the database",
+ "operationId": "updateModelRequestAPI",
+ "description": "Request to add update the Optimizer model, metadata",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "parameters": [
+ {
+ "in": "body",
+ "name": "optimModelRequest",
+ "description": "optimization model request",
+ "schema": {
+ "$ref": "#/definitions/OptimModelRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/OptimModelResponse"
+ }
+ },
+ "400": {
+ "description": "bad request"
+ },
+ "401": {
+ "description": "Request body is not compliant with the API definition"
+ },
+ "404": {
+ "description": "The server cannot find the requested URI"
+ },
+ "405": {
+ "description": "The requested method is not supported by a server."
+ },
+ "500": {
+ "description": "The server encountered an internal server error or timed out"
+ }
+ }
+ },
+ "get": {
+ "tags": [
+ "Retrieve all models"
+ ],
+ "summary": "Gets all Optim Model data",
+ "description": "Retrieves all Optim Models",
+ "operationId": "getAllOptModelData",
+ "produces": [
+ "application/json"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/ArrayOfOptimModelResponse"
+ }
+ },
+ "400": {
+ "description": "bad request"
+ },
+ "401": {
+ "description": "Request body is not compliant with the API definition"
+ },
+ "404": {
+ "description": "The server cannot find the requested URI"
+ },
+ "405": {
+ "description": "The requested method is not supported by a server."
+ },
+ "500": {
+ "description": "The server encountered an internal server error or timed out"
+ }
+ }
+ }
+ },
+ "/optmodel/v1/{model_id}": {
+ "get": {
+ "tags": [
+ "Retrieve Model Data"
+ ],
+ "summary": "Gets the Optim Model data",
+ "description": "Retrieves the Optim Model data given modelId",
+ "operationId": "getOptModelById",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "model_id",
+ "description": "Model ID",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/OptimModelResponse"
+ }
+ },
+ "400": {
+ "description": "bad request"
+ },
+ "401": {
+ "description": "Request body is not compliant with the API definition"
+ },
+ "404": {
+ "description": "The server cannot find the requested URI"
+ },
+ "405": {
+ "description": "The requested method is not supported by a server."
+ },
+ "500": {
+ "description": "The server encountered an internal server error or timed out"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "Delete Model Data"
+ ],
+ "summary": "Delete the Optim Model data",
+ "description": "Deletes the Optim Model data given modelId",
+ "operationId": "deleteOptModelById",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "model_id",
+ "description": "Model ID",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/DeleteModelResponse"
+ }
+ },
+ "400": {
+ "description": "bad request"
+ },
+ "401": {
+ "description": "Request body is not compliant with the API definition"
+ },
+ "404": {
+ "description": "The server cannot find the requested URI"
+ },
+ "405": {
+ "description": "The requested method is not supported by a server."
+ },
+ "500": {
+ "description": "The server encountered an internal server error or timed out"
+ }
+ }
+ }
+ }
+ },
+ "definitions": {
+ "OptimizationResponse": {
+ "type": "object",
+ "required": [
+ "transactionId",
+ "requestID",
+ "requestStatus"
+ ],
+ "properties": {
+ "transactionId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "unique ID to track an ONAP transaction",
+ "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
+ },
+ "requestID": {
+ "type": "string",
+ "format": "uuid",
+ "description": "A unique ID to track multiple requests associated with a transaction",
+ "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
+ },
+ "requestStatus": {
+ "type": "string",
+ "description": "request status (accepted, done, completed,failed)",
+ "example": "done"
+ },
+ "statusMessage": {
+ "type": "string",
+ "description": "Status message (incomplete, complete, unsatisfiable, unknown, unbounded, unsat_or_unbounded, error)",
+ "example": "complete"
+ },
+ "solutions": {
+ "additionalProperties": {
+ "type": "object"
+ },
+ "example": {
+ "SCHEDULED": [
+ [
+ 0,
+ 1
+ ],
+ [
+ 0,
+ 1
+ ]
+ ],
+ "OPTIMIZED": 2
+ }
+ }
+ }
+ },
+ "OptimizationRequest": {
+ "type": "object",
+ "required": [
+ "requestInfo",
+ "optimInfo"
+ ],
+ "properties": {
+ "requestInfo": {
+ "$ref": "#/definitions/RequestInfo"
+ },
+ "optimInfo": {
+ "$ref": "#/definitions/OptimInfo"
+ }
+ }
+ },
+ "RequestInfo": {
+ "type": "object",
+ "required": [
+ "transactionId",
+ "requestID",
+ "sourceId"
+ ],
+ "properties": {
+ "transactionId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "unique ID to track an ONAP transaction",
+ "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
+ },
+ "requestID": {
+ "type": "string",
+ "format": "uuid",
+ "description": "A unique ID to track multiple requests associated with a transaction",
+ "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
+ },
+ "callbackUrl": {
+ "type": "string",
+ "format": "url",
+ "description": "The end point of a callback service where recommendations are posted.",
+ "example": "myDomain.com/myCallback"
+ },
+ "sourceId": {
+ "type": "string",
+ "description": "The unique ID of a client making an optimization call.",
+ "example": "son-handler"
+ },
+ "timeout": {
+ "type": "integer",
+ "description": "A tolerance window (in second) for expecting solutions",
+ "example": 5
+ }
+ }
+ },
+ "OptimInfo": {
+ "type": "object",
+ "properties": {
+ "modelId": {
+ "type": "string",
+ "description": "ModelId from the database, if its not populated, assume that solverModel will be populated",
+ "example": "pci_model1"
+ },
+ "solver": {
+ "type": "string",
+ "description": "type of solver (mzn, py, etc.)",
+ "example": "mzn"
+ },
+ "solverArgs": {
+ "type": "object",
+ "description": "Arguments for solver",
+ "additionalProperties": {
+ "type": "object"
+ },
+ "example": {
+ "solver": "cbc",
+ "timeout": 5
+ }
+ },
+ "modelContent": {
+ "type": "string",
+ "description": "a large blob string containing the model (which is not that problematic since models are fairly small)."
+ },
+ "optData": {
+ "$ref": "#/definitions/DataInfo"
+ }
+ }
+ },
+ "DataInfo": {
+ "type": "object",
+ "description": "Data Payload, input data for the solver, either text or json",
+ "properties": {
+ "text": {
+ "type": "string",
+ "description": "Solver data as a string",
+ "example": "flour = 8000; \r\nbanana = 11;\r\n "
+ },
+ "json": {
+ "type": "object",
+ "description": "Solver data as a json",
+ "additionalProperties": {
+ "type": "object"
+ },
+ "example": {
+ "flour": 8000,
+ "banana": 11
+ }
+ }
+ }
+ },
+ "OptimModelRequest": {
+ "type": "object",
+ "required": [
+ "requestInfo",
+ "modelInfo"
+ ],
+ "properties": {
+ "requestInfo": {
+ "$ref": "#/definitions/ModelRequestInfo"
+ },
+ "modelInfo": {
+ "$ref": "#/definitions/OptimModelInfo"
+ }
+ }
+ },
+ "ModelRequestInfo": {
+ "type": "object",
+ "required": [
+ "transactionId",
+ "requestID",
+ "sourceId"
+ ],
+ "properties": {
+ "transactionId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "unique ID to track an ONAP transaction",
+ "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
+ },
+ "requestID": {
+ "type": "string",
+ "format": "uuid",
+ "description": "A unique ID to track multiple requests associated with a transaction",
+ "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
+ },
+ "sourceId": {
+ "type": "string",
+ "description": "The unique ID of a client making an optimization call.",
+ "example": "optf-osdf"
+ }
+ }
+ },
+ "OptimModelInfo": {
+ "type": "object",
+ "required": [
+ "modelId",
+ "solver",
+ "description",
+ "modelContent"
+ ],
+ "properties": {
+ "modelId": {
+ "type": "string",
+ "description": "ModelId from the database",
+ "example": "pci_anr_model1"
+ },
+ "solver": {
+ "type": "string",
+ "description": "type of solver (mzn, py, etc.)",
+ "example": "mzn"
+ },
+ "description": {
+ "type": "string",
+ "description": "Description of the model",
+ "example": "mzn model to optimize pci/anr models"
+ },
+ "modelContent": {
+ "type": "string",
+ "description": "a large blob string containing the model (which is not that problematic since models are fairly small).",
+ "example": "mzn content"
+ }
+ }
+ },
+ "ArrayOfOptimModelResponse": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/OptimModelResponse"
+ }
+ },
+ "OptimModelResponse": {
+ "type": "object",
+ "required": [
+ "modelId",
+ "solver",
+ "modelContent"
+ ],
+ "properties": {
+ "modelId": {
+ "type": "string",
+ "description": "ModelId from the database",
+ "example": "pci_anr_model1"
+ },
+ "solver": {
+ "type": "string",
+ "description": "type of solver (mzn, py, etc.)",
+ "example": "mzn"
+ },
+ "description": {
+ "type": "string",
+ "description": "Description of the model",
+ "example": "mzn model to optimize pci/anr models"
+ },
+ "modelContent": {
+ "type": "string",
+ "description": "a large blob string containing the model (which is not that problematic since models are fairly small).",
+ "example": "mzn content"
+ },
+ "statusMessage": {
+ "type": "string",
+ "description": "status message.",
+ "example": "mzn content"
+ }
+ }
+ },
+ "DeleteModelResponse": {
+ "type": "object",
+ "required": [
+ "statusMessage"
+ ],
+ "properties": {
+ "statusMessage": {
+ "type": "string",
+ "description": "status message.",
+ "example": "model data for modelId pci_anr_model1 deleted"
+ }
+ }
+ }
+ },
+ "schemes": [
+ "https"
+ ],
+ "host": "virtserver.swaggerhub.com",
+ "basePath": "/api/oof/"
+}
diff --git a/docs/api/swagger/oof-osdf-has-api.json b/docs/api/swagger/oof-osdf-has-api.json
new file mode 100644
index 0000000..a2fa43f
--- /dev/null
+++ b/docs/api/swagger/oof-osdf-has-api.json
@@ -0,0 +1,2155 @@
+{
+ "swagger": "2.0",
+ "info": {
+ "description": "This is the ONAP OOF OSDF (Optimization Service Design Framework) API",
+ "version": "1.0.0",
+ "title": "OSDF API",
+ "contact": {
+ "email": "frank.sandoval@oamtechnologies.com"
+ },
+ "license": {
+ "name": "Apache 2.0",
+ "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
+ }
+ },
+ "securityDefinitions": {
+ "basicAuth": {
+ "type": "basic",
+ "description": "HTTP Basic Auth"
+ }
+ },
+ "security": [
+ {
+ "basicAuth": []
+ }
+ ],
+ "paths": {
+ "/v2/placement": {
+ "post": {
+ "tags": [
+ "Placement Optimization"
+ ],
+ "summary": "create/update a placement",
+ "operationId": "createPlacement",
+ "description": "create/update a placement",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "parameters": [
+ {
+ "in": "body",
+ "name": "placementRequest",
+ "description": "placement request",
+ "schema": {
+ "$ref": "#/definitions/PlacementRequest"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "An optimization solution is found."
+ },
+ "202": {
+ "description": "An optimization request is accepted"
+ },
+ "400": {
+ "description": "bad request"
+ },
+ "401": {
+ "description": "Request body is not compliant with the API definition"
+ },
+ "404": {
+ "description": "The server cannot find the requested URI"
+ },
+ "405": {
+ "description": "The requested method is not supported by a server."
+ },
+ "500": {
+ "description": "The server encountered an internal server error or timed out"
+ }
+ }
+ }
+ },
+ "/api/oof/placement/v1": {
+ "post": {
+ "tags": [
+ "Placement Optimization"
+ ],
+ "summary": "create/update a placement",
+ "operationId": "createPlacementv1",
+ "description": "create/update a placement",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "parameters": [
+ {
+ "in": "body",
+ "name": "placementRequest",
+ "description": "placement request",
+ "schema": {
+ "$ref": "#/definitions/PlacementRequest"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "An optimization solution is found."
+ },
+ "202": {
+ "description": "An optimization request is accepted"
+ },
+ "400": {
+ "description": "bad request"
+ },
+ "401": {
+ "description": "Request body is not compliant with the API definition"
+ },
+ "404": {
+ "description": "The server cannot find the requested URI"
+ },
+ "405": {
+ "description": "The requested method is not supported by a server."
+ },
+ "500": {
+ "description": "The server encountered an internal server error or timed out"
+ }
+ }
+ }
+ },
+ "/api/oof/v1/pci": {
+ "post": {
+ "tags": [
+ "PCI/ANR Optimization"
+ ],
+ "summary": "Initiate PCI/ANR Optimization",
+ "operationId": "initiatePCIOptRequest",
+ "description": "Initiate PCI/ANR Optimization",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "parameters": [
+ {
+ "in": "body",
+ "name": "PCIOptimizationRequest",
+ "description": "PCI request",
+ "schema": {
+ "$ref": "#/definitions/PCIOptRequest"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "An optimization solution is found."
+ },
+ "202": {
+ "description": "An optimization request is accepted"
+ },
+ "400": {
+ "description": "bad request"
+ },
+ "401": {
+ "description": "Request body is not compliant with the API definition"
+ },
+ "404": {
+ "description": "The server cannot find the requested URI"
+ },
+ "405": {
+ "description": "The requested method is not supported by a server."
+ },
+ "500": {
+ "description": "The server encountered an internal server error or timed out"
+ }
+ }
+ }
+ },
+ "/api/oof/pci/v1": {
+ "post": {
+ "tags": [
+ "PCI/ANR Optimization"
+ ],
+ "summary": "Initiate PCI/ANR Optimization",
+ "operationId": "initiatePCIOptRequestv1",
+ "description": "Initiate PCI/ANR Optimization",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "parameters": [
+ {
+ "in": "body",
+ "name": "PCIOptimizationRequest",
+ "description": "PCI request",
+ "schema": {
+ "$ref": "#/definitions/PCIOptRequest"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "An optimization solution is found."
+ },
+ "202": {
+ "description": "An optimization request is accepted"
+ },
+ "400": {
+ "description": "bad request"
+ },
+ "401": {
+ "description": "Request body is not compliant with the API definition"
+ },
+ "404": {
+ "description": "The server cannot find the requested URI"
+ },
+ "405": {
+ "description": "The requested method is not supported by a server."
+ },
+ "500": {
+ "description": "The server encountered an internal server error or timed out"
+ }
+ }
+ }
+ },
+ "/api/oof/selection/nst/v1": {
+ "post": {
+ "tags": [
+ "NST Selection"
+ ],
+ "summary": "NST selection",
+ "operationId": "selectNstRequest",
+ "description": "Request for NST selection",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "parameters": [
+ {
+ "in": "body",
+ "name": "NSTSelectionRequest",
+ "description": "nst selection request",
+ "schema": {
+ "$ref": "#/definitions/NSTSelectionRequest"
+ }
+ }
+ ],
+ "responses": {
+ "202": {
+ "description": "An optimization request is accepted",
+ "schema": {
+ "$ref": "#/definitions/SynchronousResponse"
+ }
+ },
+ "400": {
+ "description": "bad request"
+ },
+ "401": {
+ "description": "Request body is not compliant with the API definition"
+ },
+ "404": {
+ "description": "The server cannot find the requested URI"
+ },
+ "405": {
+ "description": "The requested method is not supported by a server."
+ },
+ "500": {
+ "description": "The server encountered an internal server error or timed out"
+ }
+ }
+ }
+ },
+ "/api/oof/selection/nsi/v1": {
+ "post": {
+ "tags": [
+ "NSI Selection"
+ ],
+ "summary": "NSI selection",
+ "operationId": "selectNsiRequest",
+ "description": "Request for NSI selection",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "parameters": [
+ {
+ "in": "body",
+ "name": "NSISelectionRequest",
+ "description": "NSI selection request",
+ "schema": {
+ "$ref": "#/definitions/NSISelectionRequest"
+ }
+ }
+ ],
+ "responses": {
+ "202": {
+ "description": "An optimization request is accepted",
+ "schema": {
+ "$ref": "#/definitions/SynchronousResponse"
+ }
+ },
+ "400": {
+ "description": "bad request"
+ },
+ "401": {
+ "description": "Request body is not compliant with the API definition"
+ },
+ "404": {
+ "description": "The server cannot find the requested URI"
+ },
+ "405": {
+ "description": "The requested method is not supported by a server."
+ },
+ "500": {
+ "description": "The server encountered an internal server error or timed out"
+ }
+ }
+ }
+ },
+ "/api/oof/selection/nssi/v1": {
+ "post": {
+ "tags": [
+ "NSSI Selection"
+ ],
+ "summary": "NSSI selection",
+ "operationId": "selectNssiRequest",
+ "description": "Request for NSSI selection",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "parameters": [
+ {
+ "in": "body",
+ "name": "NSSISelectionRequest",
+ "description": "NSSI selection request",
+ "schema": {
+ "$ref": "#/definitions/NSSISelectionRequest"
+ }
+ }
+ ],
+ "responses": {
+ "202": {
+ "description": "An optimization request is accepted",
+ "schema": {
+ "$ref": "#/definitions/SynchronousResponse"
+ }
+ },
+ "400": {
+ "description": "bad request"
+ },
+ "401": {
+ "description": "Request body is not compliant with the API definition"
+ },
+ "404": {
+ "description": "The server cannot find the requested URI"
+ },
+ "405": {
+ "description": "The requested method is not supported by a server."
+ },
+ "500": {
+ "description": "The server encountered an internal server error or timed out"
+ }
+ }
+ }
+ },
+ "/api/oof/terminate/nxi/v1": {
+ "post": {
+ "tags": [
+ "NSSI/NSI Termination"
+ ],
+ "summary": "NSSI/NSI Termination",
+ "operationId": "terminateNxiRequest",
+ "description": "Request for NSSI/NSI Termination",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "parameters": [
+ {
+ "in": "body",
+ "name": "NxITerminationRequest",
+ "description": "NSSI/NSI termination request",
+ "schema": {
+ "$ref": "#/definitions/NxITerminationRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "request has succeeded",
+ "schema": {
+ "$ref": "#/definitions/SynchronousTerminationResponse"
+ }
+ },
+ "400": {
+ "description": "bad request"
+ },
+ "401": {
+ "description": "Request body is not compliant with the API definition"
+ },
+ "404": {
+ "description": "The server cannot find the requested URI"
+ },
+ "405": {
+ "description": "The requested method is not supported by a server."
+ },
+ "500": {
+ "description": "The server encountered an internal server error or timed out"
+ }
+ }
+ }
+ },
+ "/api/oof/route/v1": {
+ "post": {
+ "tags": [
+ "Route Select"
+ ],
+ "summary": "Find the optimistic route between OTN domains",
+ "description": "",
+ "operationId": "getRoute",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "Source and Destination nodes across which optmistic route have to be obtained.",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/RouteRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "successful operation",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/routeResponseBody"
+ }
+ }
+ },
+ "405": {
+ "description": "Invalid input"
+ }
+ }
+ }
+ },
+ "/api/oof/mdons/route/v1": {
+ "post": {
+ "tags": [
+ "Inter Domain Route Select"
+ ],
+ "summary":"Find the optimistic inter domain route for multi domain optical system",
+ "description":"",
+ "operationId":"getInterDomainRoute",
+ "consumes": [
+ "application/json"
+ ],
+ "produces":[
+ "application/json"
+ ],
+ "parameters":[
+ {
+ "in":"body",
+ "name":"body",
+ "description":"Source and Destination interfaces across which optmistic route have to be obtained.",
+ "required":true,
+ "schema":{
+ "$ref":"#/definitions/InterDomainRouteRequest"
+ }
+ }
+ ],
+ "responses":{
+ "200":{
+ "description":"successful operation",
+ "schema":{
+ "$ref":"#/definitions/InterDomainRouteResponseBody"
+ }
+ },
+ "400":{
+ "description":"bad request"
+ },
+ "401":{
+ "description":"Request body is not compliant with the API definition"
+ },
+ "404":{
+ "description":"The server cannot find the requested URI"
+ },
+ "405":{
+ "description":"The requested method is not supported by a server."
+ },
+ "500":{
+ "description":"The server encountered an internal server error or timed out"
+ }
+ }
+ }
+ }
+ },
+ "definitions": {
+ "InterDomainRouteRequest":{
+ "type":"object",
+ "properties":{
+ "requestInfo":{
+ "$ref":"#/definitions/requestInfo"
+ },
+ "routeInfo":{
+ "$ref":"#/definitions/interDomainRouteInfo"
+ }
+ }
+ },
+ "interDomainRouteInfo":{
+ "type":"object",
+ "properties":{
+ "routeRequest":{
+ "$ref":"#/definitions/interDomainRouteRequest"
+ }
+ }
+ },
+ "interDomainRouteRequest":{
+ "type":"object",
+ "properties":{
+ "srcDetails":{
+ "$ref":"#/definitions/interDomainPortDetails"
+ },
+ "dstDetails":{
+ "$ref":"#/definitions/interDomainPortDetails"
+ },
+ "serviceRate":{
+ "type":"string",
+ "description":"The rate of the service."
+ }
+ }
+ },
+ "interDomainPortDetails":{
+ "type":"object",
+ "properties":{
+ "interfaceId":{
+ "type":"string",
+ "description":"The port id."
+ },
+ "nodeId":{
+ "type":"string",
+ "description":"The node id."
+ },
+ "controllerId":{
+ "type":"string",
+ "description":"The controller id to which the node belongs to."
+ }
+ }
+ },
+ "InterDomainRouteResponseBody":{
+ "type":"object",
+ "properties":{
+ "requestId":{
+ "type":"string",
+ "description":"A unique Id for an ONAP transaction."
+ },
+ "transactionId":{
+ "type":"string",
+ "description":"A unique ID to track multiple requests associated with a transaction."
+ },
+ "statusMessage":{
+ "type":"string",
+ "description":"Reasoning if a requestStatus is failure."
+ },
+ "requestStatus":{
+ "type":"string",
+ "description":"The status of a request."
+ },
+ "solutions":{
+ "$ref":"#/definitions/InterDomainRouteSolutionInfo"
+ }
+ }
+ },
+ "InterDomainRouteSolutionInfo":{
+ "type":"object",
+ "properties":{
+ "routeInfo":{
+ "$ref":"#/definitions/interDomainResponseRouteinfo"
+ }
+ }
+ },
+ "interDomainResponseRouteinfo":{
+ "type":"object",
+ "properties":{
+ "serviceRoute":{
+ "type":"array",
+ "items":{
+ "$ref":"#/definitions/serviceRouteDetails"
+ }
+ },
+ "linkList":{
+ "type":"array",
+ "items":{
+ "type":"string"
+ },
+ "description":"A list of link names of the route.",
+ "example":[
+ "link1",
+ "link2"
+ ]
+ }
+ }
+ },
+ "serviceRouteDetails":{
+ "type":"object",
+ "properties":{
+ "srcInterfaceId":{
+ "type":"string",
+ "description":"Source port Id of the domain Service."
+ },
+ "dstInterfaceId":{
+ "type":"string",
+ "description":"Destination Port Id of the domain Service."
+ },
+ "controllerId":{
+ "type":"string",
+ "description":"Controller Id of the domain."
+ }
+ }
+ },
+ "RouteRequest": {
+ "type": "object",
+ "properties": {
+ "requestInfo": {
+ "$ref": "#/definitions/requestInfo"
+ },
+ "routeInfo": {
+ "$ref": "#/definitions/routeInfo"
+ }
+ }
+ },
+ "requestInfo": {
+ "type": "object",
+ "properties": {
+ "transactionId": {
+ "type": "string",
+ "description": "A unique ID to track an ONAP transaction."
+ },
+ "requestId": {
+ "type": "string",
+ "description": "A unique ID to track multiple requests associated with a transaction."
+ },
+ "callbackUrl": {
+ "type": "string",
+ "description": "The end point of a callback service where recommendations are posted."
+ },
+ "callbackHeader": {
+ "type": "string",
+ "description": "The header information a client expecting in a async callback."
+ },
+ "sourceId": {
+ "type": "string",
+ "description": "The unique ID of a client making an optimization call."
+ },
+ "requestType": {
+ "type": "string",
+ "format": "string",
+ "description": "The type of request being placed.",
+ "enum": [
+ "create",
+ "update",
+ "delete"
+ ]
+ },
+ "numSolutions": {
+ "type": "integer",
+ "format": "int32",
+ "description": "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": {
+ "description": "A list of optimization services that can be used to resolve the route",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "timeout": {
+ "type": "integer",
+ "format": "int32",
+ "description": "A tolerance window (in secs) for expecting solutions. Default is 600 secs."
+ }
+ }
+ },
+ "routeInfo": {
+ "type": "object",
+ "properties": {
+ "routeRequest": {
+ "$ref": "#/definitions/routeRequest"
+ }
+ }
+ },
+ "routeRequest": {
+ "type": "object",
+ "properties": {
+ "srcPort": {
+ "$ref": "#/definitions/routePortInfo"
+ },
+ "destPort": {
+ "$ref": "#/definitions/routePortInfo"
+ }
+ }
+ },
+ "routePortInfo": {
+ "type": "object",
+ "properties": {
+ "accessTopologyId": {
+ "type": "string",
+ "description": "A unique ID of the Access Topology."
+ },
+ "accessClientId": {
+ "type": "string",
+ "format": "string",
+ "description": "A unique ID of the client which provides the access."
+ },
+ "accessProviderId": {
+ "type": "string",
+ "format": "string",
+ "description": "A unique ID of the access provider"
+ },
+ "accessNodeId": {
+ "type": "string",
+ "format": "string",
+ "description": "A unique ID of the node to/from which the route has to be established."
+ },
+ "accessLtpId": {
+ "type": "integer",
+ "format": "int32",
+ "description": "A unique ID of the Termination Point to/from which the route has to be established."
+ }
+ }
+ },
+ "routeResponseBody": {
+ "type": "object",
+ "properties": {
+ "requestId": {
+ "type": "string",
+ "description": "A unique Id for an ONAP transaction."
+ },
+ "transactionId": {
+ "type": "string",
+ "description": "A unique ID to track multiple requests associated with a transaction."
+ },
+ "statusMessage": {
+ "type": "string",
+ "description": "Reasoning if a requestStatus is failure."
+ },
+ "requestStatus": {
+ "type": "string",
+ "description": "The status of a request."
+ },
+ "solutions": {
+ "$ref": "#/definitions/RouteSolutionInfo"
+ }
+ }
+ },
+ "RouteSolutionInfo": {
+ "type": "object",
+ "properties": {
+ "startTime": {
+ "type": "string",
+ "format": "date-time",
+ "description": "start time of the operation in RFC 3339 notation for example, 2017-07-21T17:32:28Z."
+ },
+ "finishTime": {
+ "type": "string",
+ "format": "date-time",
+ "description": "end time of the operation in RFC 3339 notation for example, 2017-07-21T17:32:28Z."
+ },
+ "links": {
+ "description": "A list of vpn info that can be used to establish the route between source and destination port/node.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/link"
+ }
+ }
+ }
+ },
+ "link": {
+ "type": "object",
+ "properties": {
+ "linkId": {
+ "type": "string",
+ "description": "Id or name identifies a link uniquely."
+ }
+ }
+ },
+ "PlacementRequest": {
+ "type": "object",
+ "required": [
+ "requestInfo",
+ "placementInfo",
+ "licenseInfo",
+ "serviceInfo"
+ ],
+ "properties": {
+ "requestInfo": {
+ "$ref": "#/definitions/RequestInfo"
+ },
+ "placementInfo": {
+ "$ref": "#/definitions/PlacementInfo"
+ },
+ "licenseInfo": {
+ "$ref": "#/definitions/LicenseInfo"
+ },
+ "serviceInfo": {
+ "$ref": "#/definitions/ServiceInfo"
+ }
+ }
+ },
+ "RequestInfo": {
+ "type": "object",
+ "required": [
+ "transactionId",
+ "requestId",
+ "callbackUrl",
+ "sourceId",
+ "requestType",
+ "optimizers",
+ "timeout"
+ ],
+ "properties": {
+ "transactionId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "unique ID to track an ONAP transaction",
+ "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
+ },
+ "requestId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "A unique ID to track multiple requests associated with a transaction",
+ "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
+ },
+ "callbackUrl": {
+ "type": "string",
+ "format": "url",
+ "description": "The end point of a callback service where recommendations are posted.",
+ "example": "myDomain.com/myCallback"
+ },
+ "callbackHeader": {
+ "type": "string",
+ "description": "JSON blob. The header information a client expecting in a async callback.",
+ "example": {
+ "blob": "content"
+ }
+ },
+ "sourceId": {
+ "type": "string",
+ "description": "The unique ID of a client making an optimization call.",
+ "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
+ },
+ "requestType": {
+ "type": "string",
+ "enum": [
+ "create",
+ "update",
+ "delete"
+ ],
+ "description": "The type of a request",
+ "example": "create"
+ },
+ "numSolutions": {
+ "type": "integer",
+ "description": "Expected number of solutions.",
+ "example": 1
+ },
+ "optimizers": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "placement",
+ "pci",
+ "pci-anr"
+ ]
+ },
+ "description": "A list of optimization services.",
+ "example": [
+ "placement"
+ ]
+ },
+ "timeout": {
+ "type": "integer",
+ "description": "A tolerance window (in second) for expecting solutions.",
+ "example": 5
+ }
+ }
+ },
+ "PlacementInfo": {
+ "type": "object",
+ "required": [
+ "requestParameters",
+ "placementDemands"
+ ],
+ "properties": {
+ "requestParameters": {
+ "type": "string",
+ "description": "JSON blob. A service ordering information",
+ "example": {
+ "blob": "content"
+ }
+ },
+ "placementDemands": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PlacementDemand"
+ },
+ "description": "The resource information for a placement service"
+ },
+ "subscriberInfo": {
+ "type": "object",
+ "items": {
+ "$ref": "#/definitions/SubscriberInfo"
+ },
+ "description": "The information of a service subscriber."
+ }
+ }
+ },
+ "PlacementDemand": {
+ "type": "object",
+ "required": [
+ "resourceModuleName",
+ "serviceResourceId",
+ "resourceModelInfo"
+ ],
+ "properties": {
+ "resourceModuleName": {
+ "type": "string",
+ "description": "A resource name as defined in a service mode",
+ "example": "myResourceName"
+ },
+ "serviceResourceId": {
+ "type": "string",
+ "description": "A unique resource Id with a local scope between client and OOF.",
+ "example": "myResourceId"
+ },
+ "givenPlacement": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "properties": {
+ "key": {
+ "type": "string"
+ },
+ "value": {
+ "type": "string"
+ }
+ }
+ },
+ "description": "placement parameters defined in the ordering system, keyname include tenantId",
+ "example": {
+ "tenantId": "1"
+ }
+ },
+ "resourceModelInfo": {
+ "$ref": "#/definitions/ModelMetaData"
+ },
+ "existingCandidates": {
+ "$ref": "#/definitions/Candidates"
+ },
+ "excludedCandidates": {
+ "$ref": "#/definitions/Candidates"
+ },
+ "requiredCandidates": {
+ "$ref": "#/definitions/Candidates"
+ }
+ }
+ },
+ "ModelMetaData": {
+ "type": "object",
+ "required": [
+ "modelInvariantId",
+ "modelVersionId"
+ ],
+ "properties": {
+ "modelInvariantId": {
+ "type": "string",
+ "description": "A model invariant Id as defined in a service model.",
+ "example": "my model invariant Id"
+ },
+ "modelVersionId": {
+ "type": "string",
+ "description": "A unique model Id as defined in a service model.",
+ "example": "my unique model Id"
+ },
+ "modelName": {
+ "type": "string",
+ "description": "A model name as defined in a service model",
+ "example": "my model name"
+ },
+ "modelType": {
+ "type": "string",
+ "description": "A model type as defined in a service model.",
+ "example": "my model type"
+ },
+ "modelVersion": {
+ "type": "string",
+ "description": "A model version as defined in a service model.",
+ "example": "my model version"
+ },
+ "modelCustomizationName": {
+ "type": "string",
+ "description": "A model customization name as defined in a service model.",
+ "example": "my model customization"
+ }
+ }
+ },
+ "Candidates": {
+ "type": "object",
+ "required": [
+ "identifierType",
+ "identifiers"
+ ],
+ "properties": {
+ "identifierType": {
+ "type": "string",
+ "enum": [
+ "service_instance_id",
+ "vnf_name",
+ "cloud_region_id"
+ ],
+ "description": "The type of a candidate.",
+ "example": "service_instance_id"
+ },
+ "identifiers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "A list of identifiers.",
+ "example": "candidateId"
+ },
+ "cloudOwner": {
+ "type": "string",
+ "description": "The name of a cloud owner. Only required if identifierType is cloud_region_id",
+ "example": "cloud_owner"
+ }
+ }
+ },
+ "SubscriberInfo": {
+ "type": "object",
+ "required": [
+ "globalSubscriberId",
+ "subscriberName",
+ "subscriberCommonSiteId"
+ ],
+ "properties": {
+ "globalSubscriberId": {
+ "type": "string",
+ "description": "An ID of a subscriber.",
+ "example": "subscriber_id"
+ },
+ "subscriberName": {
+ "type": "string",
+ "description": "The name of a subscriber. If the name is not known, the value must be 'unknown'",
+ "example": "subscriber_name"
+ },
+ "subscriberCommonSiteId": {
+ "type": "string",
+ "description": "Id representing a subscriber location",
+ "example": "subscriber_location_id"
+ }
+ }
+ },
+ "LicenseInfo": {
+ "type": "object",
+ "required": [
+ "licenseDemands"
+ ],
+ "properties": {
+ "licenseDemands": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LicenseDemands"
+ },
+ "description": "A list of resources for license selection"
+ }
+ }
+ },
+ "LicenseDemands": {
+ "type": "object",
+ "required": [
+ "resourceModuleName",
+ "serviceResourceId",
+ "resourceModelInfo"
+ ],
+ "properties": {
+ "resourceModuleName": {
+ "type": "string",
+ "description": "A resource name as defined in a service model.",
+ "example": "service_instance_id"
+ },
+ "serviceResourceId": {
+ "type": "string",
+ "description": "A unique resource Id with a local scope between client and OOF.",
+ "example": "service_instance_id"
+ },
+ "resourceModelInfo": {
+ "$ref": "#/definitions/ModelMetaData"
+ },
+ "existingLicenses": {
+ "$ref": "#/definitions/LicenseModel"
+ }
+ }
+ },
+ "LicenseModel": {
+ "type": "object",
+ "required": [
+ "entitlementPoolUUID",
+ "licenseKeyGroupUUID"
+ ],
+ "properties": {
+ "entitlementPoolUUID": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "description": "Entitlement pool UUIDs associated with a resource.",
+ "example": "candidateId"
+ },
+ "licenseKeyGroupUUID": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "description": "License key groups associated with a resource",
+ "example": "candidateId"
+ }
+ }
+ },
+ "SynchronousResponse": {
+ "type": "object",
+ "required": [
+ "requestId",
+ "transactionId",
+ "requestStatus"
+ ],
+ "properties": {
+ "requestId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "A unique Id for an ONAP transaction",
+ "example": "ONAP transaction id"
+ },
+ "transactionId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "A unique ID to track multiple requests associated with a transaction.",
+ "example": "requests id"
+ },
+ "statusMessage": {
+ "type": "string",
+ "description": "Reasoning if a requestStatus is failure.",
+ "example": "requestStatus"
+ },
+ "requestStatus": {
+ "type": "string",
+ "enum": [
+ "success",
+ "failure"
+ ],
+ "description": "The status of a request.",
+ "example": "success"
+ }
+ }
+ },
+ "SynchronousTerminationResponse": {
+ "type": "object",
+ "required": [
+ "requestId",
+ "transactionId",
+ "requestStatus",
+ "terminateResponse"
+ ],
+ "properties": {
+ "requestId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "A unique Id for an ONAP transaction",
+ "example": "ONAP transaction id"
+ },
+ "transactionId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "A unique ID to track multiple requests associated with a transaction.",
+ "example": "requests id"
+ },
+ "statusMessage": {
+ "type": "string",
+ "description": "Reasoning if a requestStatus is failure.",
+ "example": "requestStatus"
+ },
+ "requestStatus": {
+ "type": "string",
+ "enum": [
+ "success",
+ "failure"
+ ],
+ "description": "The status of a request.",
+ "example": "success"
+ },
+ "terminateResponse": {
+ "type": "boolean"
+ },
+ "reason": {
+ "type": "string",
+ "description": "Reason if terminateResponse is false",
+ "example": "Restricted by Policy"
+ }
+ }
+ },
+ "PlacementAsynchronousResponse": {
+ "type": "object",
+ "required": [
+ "requestId",
+ "transactionId",
+ "requestStatus",
+ "solutions"
+ ],
+ "properties": {
+ "requestId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "A unique Id for an ONAP transaction",
+ "example": "ONAP transaction id"
+ },
+ "transactionId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "A unique ID to track multiple requests associated with a transaction.",
+ "example": "requests id"
+ },
+ "statusMessage": {
+ "type": "string",
+ "description": "Reasoning if a requestStatus is failure.",
+ "example": "requestStatus"
+ },
+ "requestStatus": {
+ "type": "string",
+ "enum": [
+ "success",
+ "failure"
+ ],
+ "description": "The status of a request.",
+ "example": "success"
+ },
+ "solutions": {
+ "$ref": "#/definitions/Solutions"
+ }
+ }
+ },
+ "Solutions": {
+ "type": "object",
+ "required": [
+ "placementSolutions",
+ "licenseSolutions"
+ ],
+ "properties": {
+ "placementSolutions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ComprehensiveSolution"
+ },
+ "description": "A list of placement solutions."
+ },
+ "licenseSolutions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LicenseSolution"
+ },
+ "description": "A list of license solutions."
+ }
+ }
+ },
+ "ComprehensiveSolution": {
+ "type": "object",
+ "required": [
+ "placementSolutions"
+ ],
+ "properties": {
+ "placementSolutions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PlacementSolution"
+ },
+ "description": "A list of placement solutions."
+ }
+ }
+ },
+ "PlacementSolution": {
+ "type": "object",
+ "required": [
+ "resourceModuleName",
+ "serviceResourceId",
+ "identifierType",
+ "identifier"
+ ],
+ "properties": {
+ "resourceModuleName": {
+ "type": "string",
+ "description": "The name of a resource as defined in the service model",
+ "example": "resource name"
+ },
+ "serviceResourceId": {
+ "type": "string",
+ "description": "A resource Id as defined in a service model.",
+ "example": "resource id"
+ },
+ "identifierType": {
+ "type": "string",
+ "enum": [
+ "service_instance_id"
+ ],
+ "description": "The type of a candidate.",
+ "example": "candidate type"
+ },
+ "identifier": {
+ "type": "string",
+ "description": "The id of a candidate.",
+ "example": "candidate id"
+ },
+ "assignmentInfo": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/AssignmentInfo"
+ },
+ "description": "Additional information related to a candidate."
+ }
+ }
+ },
+ "AssignmentInfo": {
+ "type": "object",
+ "required": [
+ "key",
+ "value"
+ ],
+ "properties": {
+ "key": {
+ "type": "string",
+ "description": "An attribute name",
+ "example": "attribute name"
+ },
+ "value": {
+ "type": "string",
+ "description": "An attribute value.",
+ "example": "attribute value"
+ }
+ }
+ },
+ "LicenseSolution": {
+ "type": "object",
+ "required": [
+ "resourceModuleName",
+ "serviceResourceId",
+ "entitlementPoolUUID",
+ "licenseKeyGroupUUID",
+ "entitlementPoolInvariantUUID",
+ "licenseKeyGroupInvariantUUID"
+ ],
+ "properties": {
+ "resourceModuleName": {
+ "type": "string",
+ "description": "A resource name as defined in a service",
+ "example": "resource name"
+ },
+ "serviceResourceId": {
+ "type": "string",
+ "description": "A resource Id as defined in a service.",
+ "example": "resource Id"
+ },
+ "entitlementPoolUUID": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "description": "A list of entitlementPoolUUIDs",
+ "example": "entitlementPoolUUID"
+ },
+ "licenseKeyGroupUUID": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "description": "A list of licenseKeyGroupUUID.",
+ "example": "licenseKeyGroupUUID"
+ },
+ "entitlementPoolInvariantUUID": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "description": "A list of entitlementPoolInvariantUUID",
+ "example": "entitlementPoolInvariantUUID"
+ },
+ "licenseKeyGroupInvariantUUID": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "description": "A list of licenseKeyGroupInvariantUUID",
+ "example": "licenseKeyGroupInvariantUUID"
+ }
+ }
+ },
+ "ServiceInfo": {
+ "type": "object",
+ "required": [
+ "serviceInstanceId",
+ "modelInfo",
+ "serviceName"
+ ],
+ "properties": {
+ "serviceInstanceId": {
+ "type": "string",
+ "description": "A service instance id associated with a request.",
+ "example": "service_instance_id"
+ },
+ "modelInfo": {
+ "$ref": "#/definitions/ModelMetaData"
+ },
+ "serviceName": {
+ "type": "string",
+ "description": "The name of a service",
+ "example": "service_name"
+ }
+ }
+ },
+ "PCIOptRequest": {
+ "type": "object",
+ "required": [
+ "requestInfo",
+ "cellInfo"
+ ],
+ "properties": {
+ "requestInfo": {
+ "$ref": "#/definitions/RequestInfo"
+ },
+ "cellInfo": {
+ "$ref": "#/definitions/CellInfo"
+ }
+ }
+ },
+ "CellInfo": {
+ "type": "object",
+ "required": [
+ "networkId",
+ "cellIdList",
+ "anrInputList",
+ "trigger"
+ ],
+ "properties": {
+ "networkId": {
+ "type": "string",
+ "description": "Id of network requiring PCI optimization",
+ "example": 100
+ },
+ "cellIdList": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "List of cellIds triggering need for PCI optimization (eg.potential confusion)",
+ "example": [
+ "cell0001",
+ "cell0002"
+ ]
+ },
+ "anrInputList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ANRInfo"
+ },
+ "description": "A list of ANR Input."
+ },
+ "fixedPCICells": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "List of blacklisted cells whose PCI values should not be changed",
+ "example": [
+ "cell0007",
+ "cell0009"
+ ]
+ },
+ "priorityTreatmentCells": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "List of cells which should be given special treatment during optimization",
+ "example": [
+ "cell0010",
+ "cell0003"
+ ]
+ },
+ "trigger": {
+ "type": "string",
+ "description": "Type of trigger causing need for PCI optimization",
+ "example": "NbrListChange"
+ }
+ }
+ },
+ "PCIAsynchronousResponse": {
+ "type": "object",
+ "required": [
+ "requestId",
+ "transactionId",
+ "requestStatus",
+ "solutions"
+ ],
+ "properties": {
+ "requestId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "A unique Id for an ONAP transaction",
+ "example": "ONAP transaction id"
+ },
+ "transactionId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "A unique ID to track multiple requests associated with a transaction.",
+ "example": "requests id"
+ },
+ "statusMessage": {
+ "type": "string",
+ "description": "Reasoning if a requestStatus is failure.",
+ "example": "requestStatus"
+ },
+ "requestStatus": {
+ "type": "string",
+ "enum": [
+ "success",
+ "failure"
+ ],
+ "description": "The status of a request.",
+ "example": "success"
+ },
+ "solutions": {
+ "$ref": "#/definitions/PCIANRSolutions"
+ }
+ }
+ },
+ "PCIANRSolutions": {
+ "type": "object",
+ "required": [
+ "networkId",
+ "pciSolutions",
+ "anrSolutions"
+ ],
+ "properties": {
+ "networkId": {
+ "type": "string",
+ "description": "Id of network requiring PCI optimization",
+ "example": 100
+ },
+ "pciSolutions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PCISolution"
+ },
+ "description": "A list of PCI solutions."
+ },
+ "anrSolutions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ANRInfo"
+ },
+ "description": "A list of ANR solutions."
+ }
+ }
+ },
+ "PCISolution": {
+ "type": "object",
+ "required": [
+ "cellId",
+ "pci"
+ ],
+ "properties": {
+ "cellId": {
+ "type": "string",
+ "description": "cellId with modified PCI value",
+ "example": "cell0001"
+ },
+ "pci": {
+ "type": "integer",
+ "description": "New PCI value for cellId",
+ "example": 1
+ }
+ }
+ },
+ "ANRInfo": {
+ "type": "object",
+ "required": [
+ "cellId",
+ "removeableNeighbors"
+ ],
+ "properties": {
+ "cellId": {
+ "type": "string",
+ "description": "cellId with modified PCI value",
+ "example": "cell0001"
+ },
+ "removeableNeighbors": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "List of neighbors to be removed",
+ "example": [
+ "cell0002",
+ "cell0003"
+ ]
+ }
+ }
+ },
+ "NSTSelectionRequest": {
+ "type": "object",
+ "required": [
+ "requestInfo",
+ "serviceProfile"
+ ],
+ "properties": {
+ "requestInfo": {
+ "$ref": "#/definitions/RequestInfo2"
+ },
+ "serviceProfile": {
+ "$ref": "#/definitions/ServiceProfile"
+ }
+ }
+ },
+ "NSISelectionRequest": {
+ "type": "object",
+ "required": [
+ "requestInfo",
+ "serviceProfile",
+ "NSTInfo",
+ "NSSTInfo",
+ "subnetCapabilities"
+ ],
+ "properties": {
+ "serviceProfile": {
+ "$ref": "#/definitions/ServiceProfile"
+ },
+ "requestInfo": {
+ "$ref": "#/definitions/RequestInfo2"
+ },
+ "NSTInfo": {
+ "$ref": "#/definitions/NSTInfo"
+ },
+ "NSSTInfo": {
+ "type": "array",
+ "description": "List of constituent NSST(s) of the NST",
+ "items": {
+ "$ref": "#/definitions/NSSTInfo"
+ }
+ },
+ "preferReuse": {
+ "type": "boolean",
+ "description": "true if reusing an existing NSI is preferred/false if creating a new NSI is preferred "
+ },
+ "subnetCapabilities": {
+ "type": "array",
+ "description": "List of subnet capabilities",
+ "items": {
+ "$ref": "#/definitions/SubnetCapability"
+ }
+ }
+ }
+ },
+ "NSSISelectionRequest": {
+ "type": "object",
+ "required": [
+ "requestInfo",
+ "NSSTInfo",
+ "sliceProfile"
+ ],
+ "properties": {
+ "sliceProfile": {
+ "$ref": "#/definitions/SliceProfile"
+ },
+ "requestInfo": {
+ "$ref": "#/definitions/RequestInfo2"
+ },
+ "NSSTInfo": {
+ "$ref": "#/definitions/NSSTInfo"
+ }
+ }
+ },
+ "NxITerminationRequest": {
+ "type": "object",
+ "required": [
+ "requestInfo",
+ "type",
+ "NxIId"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "NSI",
+ "NSSI"
+ ],
+ "description": "indicates if the request is for NSI/NSSI termination"
+ },
+ "NxIId": {
+ "type": "string",
+ "format": "UUID",
+ "description": "Id of NSI / NSSI"
+ },
+ "UUID": {
+ "type": "string",
+ "format": "UUID",
+ "description": "UUID of NST/NSST model"
+ },
+ "invariantUUID": {
+ "type": "string",
+ "format": "UUID",
+ "description": "invariant UUID of NST/NSST model"
+ },
+ "requestInfo": {
+ "$ref": "#/definitions/RequestInfo2"
+ }
+ }
+ },
+ "SubnetCapability": {
+ "type": "object",
+ "required": [
+ "domainType",
+ "capabilityDetails"
+ ],
+ "properties": {
+ "domainType": {
+ "type": "string",
+ "description": "type of the subnet"
+ },
+ "capabilityDetails": {
+ "type": "string",
+ "description": "A JSON object containing capability parameters",
+ "example": {
+ "blob": "content"
+ }
+ }
+ }
+ },
+ "NSTInfo": {
+ "type": "object",
+ "required": [
+ "UUID",
+ "invariantUUID",
+ "name"
+ ],
+ "properties": {
+ "UUID": {
+ "type": "string",
+ "format": "uuid",
+ "description": "UUID of NST"
+ },
+ "invariantUUID": {
+ "type": "string",
+ "format": "uuid",
+ "description": "Invariant UUID"
+ },
+ "name": {
+ "type": "string",
+ "description": "name of the NST model"
+ }
+ }
+ },
+ "NSSTInfo": {
+ "type": "object",
+ "required": [
+ "UUID",
+ "invariantUUID",
+ "name"
+ ],
+ "properties": {
+ "UUID": {
+ "type": "string",
+ "format": "uuid",
+ "description": "UUID of NSST"
+ },
+ "invariantUUID": {
+ "type": "string",
+ "format": "uuid",
+ "description": "Invariant UUID"
+ },
+ "name": {
+ "type": "string",
+ "description": "name of the NSST model"
+ }
+ }
+ },
+ "ServiceProfile": {
+ "type": "string",
+ "description": "JSON blob. Containing service profile parameters. The contents are based on 3GPP TS 23.541 Release 16 contents, and will be in the form of attribute value pairs.",
+ "example": {
+ "blob": "content"
+ }
+ },
+ "SliceProfile": {
+ "type": "string",
+ "description": "JSON blob. Containing slice profile parameters. The contents are based on 3GPP TS 23.541 Release 16 contents, and will be in the form of attribute value pairs.",
+ "example": {
+ "blob": "content"
+ }
+ },
+ "RequestInfo2": {
+ "type": "object",
+ "required": [
+ "transactionId",
+ "requestId",
+ "callbackUrl",
+ "sourceId"
+ ],
+ "properties": {
+ "transactionId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "unique ID to track an ONAP transaction",
+ "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
+ },
+ "requestId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "A unique ID to track multiple requests associated with a transaction",
+ "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
+ },
+ "callbackUrl": {
+ "type": "string",
+ "format": "url",
+ "description": "The end point of a callback service where recommendations are posted.",
+ "example": "myDomain.com/myCallback"
+ },
+ "callbackHeader": {
+ "type": "string",
+ "description": "JSON blob. The header information a client expecting in a async callback.",
+ "example": {
+ "blob": "content"
+ }
+ },
+ "sourceId": {
+ "type": "string",
+ "description": "The unique ID of a client making an optimization call.",
+ "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
+ },
+ "timeout": {
+ "type": "integer",
+ "description": "A tolerance window (in second) for expecting solutions.",
+ "example": 5
+ },
+ "numSolutions": {
+ "type": "integer",
+ "description": "Expected number of solutions.",
+ "example": 1
+ },
+ "addtnlArgs": {
+ "type": "string",
+ "description": "Any additional parameters that have to be considered during selection",
+ "example": {
+ "blob": "content"
+ }
+ }
+ }
+ },
+ "NSTAsynchronousResponse": {
+ "type": "object",
+ "required": [
+ "transactionId",
+ "requestId",
+ "requestStatus",
+ "solutions"
+ ],
+ "properties": {
+ "transactionId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "unique ID to track an ONAP transaction",
+ "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
+ },
+ "requestId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "A unique ID to track multiple requests associated with a transaction",
+ "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
+ },
+ "statusMessage": {
+ "type": "string",
+ "description": "Reasoning if a requestStatus is failed."
+ },
+ "requestStatus": {
+ "type": "string",
+ "enum": [
+ "completed",
+ "failed",
+ "pending"
+ ],
+ "description": "The status of a request."
+ },
+ "solutions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/NSTSolution"
+ },
+ "description": "A list of NST solutions"
+ }
+ }
+ },
+ "NSTSolution": {
+ "type": "object",
+ "required": [
+ "UUID",
+ "NSTName",
+ "invariantUUID",
+ "matchLevel"
+ ],
+ "properties": {
+ "invariantUUID": {
+ "type": "string",
+ "format": "uuid",
+ "description": "Invariant UUID of NST"
+ },
+ "UUID": {
+ "type": "string",
+ "format": "UUID of NST"
+ },
+ "NSTName": {
+ "type": "string",
+ "description": "NST name"
+ },
+ "matchLevel": {
+ "type": "string",
+ "description": "JSON blob. Containing details of match of requirements in slice profile and percentage of fit"
+ }
+ }
+ },
+ "NSIAsynchronousResponse": {
+ "type": "object",
+ "required": [
+ "transactionId",
+ "requestId",
+ "requestStatus",
+ "solutions"
+ ],
+ "properties": {
+ "transactionId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "unique ID to track an ONAP transaction",
+ "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
+ },
+ "requestId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "A unique ID to track multiple requests associated with a transaction",
+ "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
+ },
+ "statusMessage": {
+ "type": "string",
+ "description": "Reasoning if a requestStatus is failed."
+ },
+ "requestStatus": {
+ "type": "string",
+ "enum": [
+ "completed",
+ "failed",
+ "pending"
+ ],
+ "description": "The status of a request."
+ },
+ "solutions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/NSISolution"
+ },
+ "description": "A list of NSI solutions"
+ }
+ }
+ },
+ "NSISolution": {
+ "type": "object",
+ "required": [
+ "existingNSI"
+ ],
+ "properties": {
+ "existingNSI": {
+ "type": "boolean",
+ "description": "true if NSISolution object has shareNSISolution/false if NSISolution object has newNSISolution"
+ },
+ "sharedNSISolution": {
+ "$ref": "#/definitions/SharedNSISolution"
+ },
+ "newNSISolution": {
+ "$ref": "#/definitions/NewNSISolution"
+ }
+ }
+ },
+ "SharedNSISolution": {
+ "type": "object",
+ "required": [
+ "invariantUUID",
+ "UUID",
+ "NSIName",
+ "NSIId",
+ "matchLevel"
+ ],
+ "properties": {
+ "invariantUUID": {
+ "type": "string",
+ "format": "uuid",
+ "description": "Invariant UUID of NST"
+ },
+ "UUID": {
+ "type": "string",
+ "format": "uuid",
+ "description": "UUID of NST"
+ },
+ "NSIName": {
+ "type": "string",
+ "description": "Name of NSI"
+ },
+ "NSIId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "Instance Id of NSI"
+ },
+ "matchLevel": {
+ "type": "string",
+ "description": "JSON blob. Containing details of match of requirements in service profile, and recommendation rank"
+ }
+ }
+ },
+ "NewNSISolution": {
+ "type": "object",
+ "required": [
+ "sliceProfiles",
+ "matchLevel"
+ ],
+ "properties": {
+ "sliceProfiles": {
+ "type": "array",
+ "description": "List of slice profiles",
+ "items": {
+ "$ref": "#/definitions/SliceProfile"
+ }
+ },
+ "matchLevel": {
+ "type": "string",
+ "description": "JSON blob. Containing details of match of requirements in service profile, and recommendation rank"
+ }
+ }
+ },
+ "NSSIAsynchronousResponse": {
+ "type": "object",
+ "required": [
+ "transactionId",
+ "requestId",
+ "requestStatus",
+ "solutions"
+ ],
+ "properties": {
+ "transactionId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "unique ID to track an ONAP transaction",
+ "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
+ },
+ "requestId": {
+ "type": "string",
+ "format": "uuid",
+ "description": "A unique ID to track multiple requests associated with a transaction",
+ "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
+ },
+ "statusMessage": {
+ "type": "string",
+ "description": "Reasoning if a requestStatus is failed."
+ },
+ "requestStatus": {
+ "type": "string",
+ "enum": [
+ "completed",
+ "failed",
+ "pending"
+ ],
+ "description": "The status of a request."
+ },
+ "solutions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/SharedNSSISolution"
+ },
+ "description": "A list of NSSI solutions, empty list will be returned if no solution is found"
+ }
+ }
+ },
+ "SharedNSSISolution": {
+ "type": "object",
+ "required": [
+ "invariantUUID",
+ "UUID",
+ "NSSIName",
+ "NSSIId",
+ "matchLevel"
+ ],
+ "properties": {
+ "invariantUUID": {
+ "type": "string",
+ "format": "uuid",
+ "description": "Invariant UUID of NSST"
+ },
+ "UUID": {
+ "type": "string",
+ "format": "uuid",
+ "description": "UUID of NSST"
+ },
+ "NSSIName": {
+ "type": "string",
+ "description": "Name of NSSI"
+ },
+ "NSSIId": {
+ "type": "string",
+ "description": "Instance Id of NSSI"
+ },
+ "matchLevel": {
+ "type": "string",
+ "description": "JSON blob. Containing details of match of requirements in slice profile and percentage of fit"
+ }
+ }
+ }
+ },
+ "schemes": [
+ "https"
+ ],
+ "host": "virtserver.swaggerhub.com",
+ "basePath": "/oof-osdf/v1"
+}
diff --git a/docs/conf.py b/docs/conf.py
new file mode 100644
index 0000000..172975d
--- /dev/null
+++ b/docs/conf.py
@@ -0,0 +1,74 @@
+project = "onap"
+release = "master"
+version = "master"
+
+author = "Open Network Automation Platform"
+# yamllint disable-line rule:line-length
+copyright = "ONAP. Licensed under Creative Commons Attribution 4.0 International License"
+
+pygments_style = "sphinx"
+html_theme = "sphinx_rtd_theme"
+html_theme_options = {
+ "style_nav_header_background": "white",
+ "sticky_navigation": "False" }
+html_logo = "_static/logo_onap_2017.png"
+html_favicon = "_static/favicon.ico"
+html_static_path = ["_static"]
+html_show_sphinx = False
+
+extensions = [
+ 'sphinx.ext.intersphinx',
+ 'sphinx.ext.graphviz',
+ 'sphinxcontrib.blockdiag',
+ 'sphinxcontrib.seqdiag',
+ 'sphinxcontrib.swaggerdoc',
+ 'sphinxcontrib.plantuml',
+ 'sphinxcontrib.redoc'
+]
+
+#
+# Map to 'latest' if this file is used in 'latest' (master) 'doc' branch.
+# Change to {releasename} after you have created the new 'doc' branch.
+#
+
+branch = 'latest'
+
+intersphinx_mapping = {}
+doc_url = 'https://docs.onap.org/projects'
+master_doc = 'index'
+
+exclude_patterns = ['.tox']
+
+spelling_word_list_filename='spelling_wordlist.txt'
+spelling_lang = "en_GB"
+
+#
+# Example:
+# intersphinx_mapping['onap-aai-aai-common'] = ('{}/onap-aai-aai-common/en/%s'.format(doc_url) % branch, None)
+#
+
+html_last_updated_fmt = '%d-%b-%y %H:%M'
+
+def setup(app):
+ app.add_css_file("css/ribbon.css")
+
+linkcheck_ignore = [
+ r'http://localhost:\d+/'
+]
+
+redoc = [
+ {
+ 'name': 'OSDF API',
+ 'page': 'sections/osdf-api',
+ 'spec': './api/swagger/oof-osdf-has-api.json',
+ 'embed': True,
+ },
+ {
+ 'name': 'OPTENG API',
+ 'page': 'sections/opteng-api',
+ 'spec': './api/swagger/oof-optf-opteng-api.json',
+ 'embed': True,
+ }
+ ]
+
+redoc_uri = 'https://cdn.jsdelivr.net/npm/redoc@next/bundles/redoc.standalone.js'
diff --git a/docs/index.rst b/docs/index.rst
index c3ea9da..9a8302b 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -1,4 +1,5 @@
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. _master_index:
Optimization Framework: Optimization Service Design Framework (OSDF)
@@ -17,4 +18,4 @@ Optimization Framework: Optimization Service Design Framework (OSDF)
./sections/administration.rst
./sections/humaninterfaces.rst
./sections/release-notes.rst
-
+ ./sections/upgradestrategy.rst
diff --git a/docs/requirements-docs.txt b/docs/requirements-docs.txt
new file mode 100644
index 0000000..38643a1
--- /dev/null
+++ b/docs/requirements-docs.txt
@@ -0,0 +1,9 @@
+sphinx>=4.2.0 # BSD
+sphinx-rtd-theme>=1.0.0 # MIT
+sphinxcontrib-blockdiag # BSD
+sphinxcontrib-seqdiag # BSD
+sphinxcontrib-swaggerdoc
+sphinxcontrib-spelling
+sphinxcontrib-plantuml
+sphinxcontrib-redoc
+six
diff --git a/docs/sections/architecture.rst b/docs/sections/architecture.rst
index 64bc43c..b11eec2 100644
--- a/docs/sections/architecture.rst
+++ b/docs/sections/architecture.rst
@@ -1,4 +1,5 @@
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. _architecture:
Architecture
=============================================
diff --git a/docs/sections/offeredapis.rst b/docs/sections/offeredapis.rst
index 5151431..c9af97d 100644
--- a/docs/sections/offeredapis.rst
+++ b/docs/sections/offeredapis.rst
@@ -1,8 +1,9 @@
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
+.. _offeredapis:
Offered APIs
-=============================================
+============
This document describes the OSDF HAS (Homing and Allocation Service) API
@@ -10,8 +11,20 @@ This document describes the OSDF HAS (Homing and Allocation Service) API
To view API documentation in the interactive swagger UI download the following and
paste into the swagger tool here: https://editor.swagger.io
-:download:`oof-osdf-has-api.json <./swaggerdoc/oof-osdf-has-api.json>`
-
-.. swaggerv2doc:: ./swaggerdoc/oof-osdf-has-api.json
-
-
+.. csv-table::
+ :header: "API name", "Swagger JSON"
+ :widths: 10,5
+
+ "OOF OSDF HAS API", ":download:`link <../api/swagger/oof-osdf-has-api.json>`"
+ "OOF OPTENG API", ":download:`link <../api/swagger/oof-optf-opteng-api.json>`"
+
+.. OOF OSDF HAS API
+.. ................
+..
+.. `OSDF API <osdf-api.html>`_
+..
+..
+.. OOF OPTENG API
+.. ..............
+..
+.. `OPTENG API <opteng-api.html>`_
diff --git a/docs/sections/release-notes.rst b/docs/sections/release-notes.rst
index d8088dd..63ab538 100644
--- a/docs/sections/release-notes.rst
+++ b/docs/sections/release-notes.rst
@@ -1,13 +1,764 @@
..
This work is licensed under a Creative Commons Attribution 4.0
International License.
+.. _release_notes:
=============
Release Notes
=============
-Version: 1.1.1
+.. ===========================
+.. * * * KOHN * * *
+.. ===========================
+
+Abstract
+========
+
+This document provides the release notes for the KOHN release.
+
+Summary
+=======
+
+
+Release Data
+============
+
+
++--------------------------------------+--------------------------------------+
+| **OOF Project** | |
+| | |
++--------------------------------------+--------------------------------------+
+| **Docker images** | optf-osdf 3.0.7 |
+| | |
+| | |
++--------------------------------------+--------------------------------------+
+| **Release designation** | 11.0.0 kohn |
+| | |
++--------------------------------------+--------------------------------------+
+| **Release date** | 10/11/2022 (TBD) |
+| | |
++--------------------------------------+--------------------------------------+
+
+
+New features
+------------
+
+Bug Fixes
+---------
+
+- OPTFRA-1080 - Fix timeout issue in OSDF on sending plan request to HAS-API
+
+
+Known Limitations, Issues and Workarounds
+=========================================
+
+System Limitations
+------------------
+
+Known Vulnerabilities
+---------------------
+
+
+Workarounds
+-----------
+
+
+Security Notes
+--------------
+
+References
+==========
+
+For more information on the ONAP Jakarta release, please see:
+
+#. `ONAP Home Page`_
+#. `ONAP Documentation`_
+#. `ONAP Release Downloads`_
+#. `ONAP Wiki Page`_
+
+.. _`ONAP Home Page`: https://www.onap.org
+.. _`ONAP Wiki Page`: https://wiki.onap.org
+.. _`ONAP Documentation`: https://docs.onap.org
+.. _`ONAP Release Downloads`: https://git.onap.org
+
+Quick Links:
+
+- `OOF project page <https://wiki.onap.org/display/DW/Optimization+Framework+Project>`_
+- `Passing Badge information for OOF <https://bestpractices.coreinfrastructure.org/en/projects/1720>`_
+
+
+.. ===========================
+.. * * * JAKARTA * * *
+.. ===========================
+
+Abstract
+========
+
+This document provides the release notes for the JAKARTA release.
+
+Summary
+=======
+
+
+Release Data
+============
+
+
++--------------------------------------+--------------------------------------+
+| **OOF Project** | |
+| | |
++--------------------------------------+--------------------------------------+
+| **Docker images** | optf-osdf 3.0.6 |
+| | |
+| | |
++--------------------------------------+--------------------------------------+
+| **Release designation** | 10.0.0 jakarta |
+| | |
++--------------------------------------+--------------------------------------+
+| **Release date** | 02/06/2022 (TBD) |
+| | |
++--------------------------------------+--------------------------------------+
+
+
+New features
+------------
+
+
+
+Bug Fixes
+---------
+
+- OPTFRA-1059 - Update configuration for TN-FH in NxI termination app
+
+
+Known Limitations, Issues and Workarounds
+=========================================
+
+System Limitations
+------------------
+
+Known Vulnerabilities
+---------------------
+
+
+Workarounds
+-----------
+
+
+Security Notes
+--------------
+
+
+References
+==========
+
+For more information on the ONAP Jakarta release, please see:
+
+#. `ONAP Home Page`_
+#. `ONAP Documentation`_
+#. `ONAP Release Downloads`_
+#. `ONAP Wiki Page`_
+
+.. _`ONAP Home Page`: https://www.onap.org
+.. _`ONAP Wiki Page`: https://wiki.onap.org
+.. _`ONAP Documentation`: https://docs.onap.org
+.. _`ONAP Release Downloads`: https://git.onap.org
+
+Quick Links:
+
+- `OOF project page <https://wiki.onap.org/display/DW/Optimization+Framework+Project>`_
+- `Passing Badge information for OOF <https://bestpractices.coreinfrastructure.org/en/projects/1720>`_
+
+
+
+.. ===========================
+.. * * * ISTANBUL * * *
+.. ===========================
+
+Abstract
+========
+
+This document provides the release notes for the Istanbul release.
+
+Summary
+=======
+
+
+Release Data
+============
+
+
++--------------------------------------+--------------------------------------+
+| **OOF Project** | |
+| | |
++--------------------------------------+--------------------------------------+
+| **Docker images** | optf-osdf 3.0.6 |
+| | |
+| | |
++--------------------------------------+--------------------------------------+
+| **Release designation** | 9.0.0 istanbul |
+| | |
++--------------------------------------+--------------------------------------+
+| **Release date** | 28/10/2021 (TBD) |
+| | |
++--------------------------------------+--------------------------------------+
+
+
+New features
+------------
+
+- Enhancements in NxI termination to support second level NSSIs
+- Update NxI termination app to use AAI DSL query
+- Add CPS client for PCI app
+- OSDF image optimization
+
+Bug Fixes
+---------
+
+- OPTFRA-511 Return error when policies are not present
+- OPTFRA-943 Fix issues in NSI selection response
+- OPTFRA-853 Remove unwanted gplv3 components from docker image
+
+
+Known Limitations, Issues and Workarounds
+=========================================
+
+System Limitations
+------------------
+
+
+Known Vulnerabilities
+---------------------
+
+
+Workarounds
+-----------
+
+
+Security Notes
+--------------
+
+
+References
+==========
+
+For more information on the ONAP Honolulu release, please see:
+
+#. `ONAP Home Page`_
+#. `ONAP Documentation`_
+#. `ONAP Release Downloads`_
+#. `ONAP Wiki Page`_
+
+
+.. _`ONAP Home Page`: https://www.onap.org
+.. _`ONAP Wiki Page`: https://wiki.onap.org
+.. _`ONAP Documentation`: https://docs.onap.org
+.. _`ONAP Release Downloads`: https://git.onap.org
+
+Quick Links:
+ - `OOF project page <https://wiki.onap.org/display/DW/Optimization+Framework+Project>`_
+ - `Passing Badge information for OOF <https://bestpractices.coreinfrastructure.org/en/projects/1720>`_
+
+
+.. ===========================
+.. * * * HONOLULU * * *
+.. ===========================
+
+Abstract
+========
+
+This document provides the release notes for the Honolulu release.
+
+Summary
+=======
+
+
+Release Data
+============
+
+
++--------------------------------------+--------------------------------------+
+| **OOF Project** | |
+| | |
++--------------------------------------+--------------------------------------+
+| **Docker images** | optf-osdf 3.0.4 |
+| | |
+| | |
++--------------------------------------+--------------------------------------+
+| **Release designation** | 8.0.0 honolulu |
+| | |
++--------------------------------------+--------------------------------------+
+| **Release date** | 04/08/2021 (TBD) |
+| | |
++--------------------------------------+--------------------------------------+
+
+
+New features
+------------
+
+- Add NST selection feature with AAI & SDC
+- Configuration management with consul KV store
+
+Bug Fixes
+---------
+
+- OPTFRA-906 Update slice/service profile attributes
+- OPTFRA-871 Bug Fix in ML SON - convert cell_id before sending it to Minizinc
+
+
+Known Limitations, Issues and Workarounds
+=========================================
+
+System Limitations
+------------------
+
+
+Known Vulnerabilities
+---------------------
+
+
+Workarounds
+-----------
+
+
+Security Notes
+--------------
+
+
+References
+==========
+
+For more information on the ONAP Honolulu release, please see:
+
+#. `ONAP Home Page`_
+#. `ONAP Documentation`_
+#. `ONAP Release Downloads`_
+#. `ONAP Wiki Page`_
+
+
+.. _`ONAP Home Page`: https://www.onap.org
+.. _`ONAP Wiki Page`: https://wiki.onap.org
+.. _`ONAP Documentation`: https://docs.onap.org
+.. _`ONAP Release Downloads`: https://git.onap.org
+
+Quick Links:
+ - `OOF project page <https://wiki.onap.org/display/DW/Optimization+Framework+Project>`_
+ - `Passing Badge information for OOF <https://bestpractices.coreinfrastructure.org/en/projects/1720>`_
+
+.. ===========================
+.. * * * GUILIN * * *
+.. ===========================
+
+Abstract
+========
+
+This document provides the release notes for the Guilin release.
+
+Summary
+=======
+
+
+Release Data
+============
+
+
++--------------------------------------+--------------------------------------+
+| **OOF Project** | |
+| | |
++--------------------------------------+--------------------------------------+
+| **Docker images** | optf-osdf 3.0.2 |
+| | |
+| | |
++--------------------------------------+--------------------------------------+
+| **Release designation** | 7.0.0 guilin |
+| | |
++--------------------------------------+--------------------------------------+
+| **Release date** | 2020-11-19 (TBD) |
+| | |
++--------------------------------------+--------------------------------------+
+
+
+New features
+------------
+
+- NSI selection enhancements
+- Support for NSSI selection
+- Support for NSI/NSSI Termination
+- Support for Inter domain route optimization
+- Support for ML based SON optimization
+- Upgrade python version to 3.8
+
+Bug Fixes
+---------
+
+- OPTFRA-839 Remove python 2.7 from OSDF docker image
+- OPTFRA-855 Fix slice selection API
+- OPTFRA-852 Callback implementation for NST selection
+
+Known Limitations, Issues and Workarounds
+=========================================
+
+System Limitations
+------------------
+
+
+Known Vulnerabilities
+---------------------
+
+
+Workarounds
+-----------
+
+
+Security Notes
+--------------
+
+
+References
+==========
+
+For more information on the ONAP Guilin release, please see:
+
+#. `ONAP Home Page`_
+#. `ONAP Documentation`_
+#. `ONAP Release Downloads`_
+#. `ONAP Wiki Page`_
+
+
+.. _`ONAP Home Page`: https://www.onap.org
+.. _`ONAP Wiki Page`: https://wiki.onap.org
+.. _`ONAP Documentation`: https://docs.onap.org
+.. _`ONAP Release Downloads`: https://git.onap.org
+
+Quick Links:
+ - `OOF project page <https://wiki.onap.org/display/DW/Optimization+Framework+Project>`_
+ - `Passing Badge information for OOF <https://bestpractices.coreinfrastructure.org/en/projects/1720>`_
+
+.. ===========================
+.. * * * FRANKFURT * * *
+.. ===========================
+
+Abstract
+========
+
+This document provides the release notes for the Frankfurt release.
+
+Summary
+=======
+
+
+Release Data
+============
+
+
++--------------------------------------+--------------------------------------+
+| **OOF Project** | |
+| | |
++--------------------------------------+--------------------------------------+
+| **Docker images** | optf-osdf 2.0.4 |
+| | |
+| | |
++--------------------------------------+--------------------------------------+
+| **Release designation** | 6.0.0 frankfurt |
+| | |
++--------------------------------------+--------------------------------------+
+| **Release date** | 2020-05-07 (TBD) |
+| | |
++--------------------------------------+--------------------------------------+
+
+
+New features
+------------
+
+- Project is restructured into apps and libs.
+- A Generic optimizing engine is implemented.
+- New optimizer model for route optimization is added.
+- Policy apis are migrated from legacy apis to new decision api.
+- The Conductor adapter is moved from placement to adapters.
+- NST and NSI selection function has been implemented for Network
+ Slicing use case.
+- PCI optimization is enhanced to support fixed cells field.
+
+Bug Fixes
+---------
+
+- OPTFRA-482 The field "unique" should be defined in vnf policy.
+- OPTFRA-729 OSDF fails to start in the k8s environment.
+- OPTFRA-731 OSDF Policy interface is not working
+- OPTFRA-754 Return slice profile when service profile indicates the
+ resource sharing level as not shared
+- OPTFRA-755 OOF Policy filtering does not work.
+
+Known Limitations, Issues and Workarounds
+=========================================
+
+System Limitations
+------------------
+
+
+Known Vulnerabilities
+---------------------
+
+
+Workarounds
+-----------
+
+
+Security Notes
+--------------
+
+
+References
+==========
+
+For more information on the ONAP Frankfurt release, please see:
+
+#. `ONAP Home Page`_
+#. `ONAP Documentation`_
+#. `ONAP Release Downloads`_
+#. `ONAP Wiki Page`_
+
+
+.. _`ONAP Home Page`: https://www.onap.org
+.. _`ONAP Wiki Page`: https://wiki.onap.org
+.. _`ONAP Documentation`: https://docs.onap.org
+.. _`ONAP Release Downloads`: https://git.onap.org
+
+Quick Links:
+ - `OOF project page <https://wiki.onap.org/display/DW/Optimization+Framework+Project>`_
+ - `Passing Badge information for OOF <https://bestpractices.coreinfrastructure.org/en/projects/1720>`_
+
+
+Version: 5.0.1
+--------------
+
+:Release Date: 2019-09-30 (El Alto Release)
+
+The El Alto release is the fourth release for ONAP Optimization Framework (OOF).
+
+Artifacts released:
+
+optf-has:1.3.3
+optf-osdf:1.3.4
+optf-cmso:2.1.1
+
+**New Features**
+
+While no new features were added in the release, the following Stories were delivered as enhancements.
+
+ * [OPTFRA-415] Automation on policy model uploading
+ * [OPTFRA-427] CMSO - Schedule a workflow in SO and track status to completion
+
+* Platform Maturity Level 1
+ * ~65.1+ unit test coverage
+
+
+**Bug Fixes**
+
+The El Alto release for OOF fixed the following Bugs.
+
+ * [OPTFRA-579] Json error in homing solution
+ * [OPTFRA-521] oof-has-api exposes plain text HTTP endpoint using port 30275
+ * [OPTFRA-522] oof-osdf exposes plain text HTTP endpoint using port 30248
+ * [OPTFRA-577] Need for "ReadWriteMany" access on storage when deploying on Kubernetes?
+ * [OPTFRA-517] Clean up optf/cmso in integration/csit for Dublin
+ * [OPTFRA-486] Support "identifiers" field as a list of values
+ * [OPTFRA-403] OOF CMSO Service kubernetes resources allocation is not done
+ * [OPTFRA-526] OOF pods not running
+ * [OPTFRA-409] Template example : purpose to be explained
+ * [OPTFRA-593] OOF-CSMO healthcheck is failing in Master
+
+
+**Known Issues**
+
+ * [OPTFRA-576] optf-has-master-csit-has is testing Dublin image
+ * [OPTFRA-596] CMSO - Sonar and CSIT jobs failing
+ * [OPTFRA-608] Error in Homing with multiple policies
+
+**Security Notes**
+
+*Fixed Security Issues*
+
+ * [OJSI-122] In default deployment OPTFRA (oof-osdf) exposes HTTP port 30248 outside of cluster.
+ * [OPTFRA-521] oof-has-api exposes plain text HTTP endpoint using port 30275
+ * [OPTFRA-522] oof-osdf exposes plain text HTTP endpoint using port 30248
+ * [OPTFRA-455] CMSO - Mitigate License Threat tomcat-embed-core
+
+*Known Security Issues*
+
+ * [OPTFRA-481] Fix Vulnerability with spring-data-jpa package
+ * [OPTFRA-431] Fix Vulnerability with spring-security-web package
+
+*Known Vulnerabilities in Used Modules*
+
+**Upgrade Notes**
+
+
+**Deprecation Notes**
+
+
+**Other**
+
+
+Version: 4.0.0
+--------------
+
+:Release Date: 2019-06-06 (Dublin Release)
+
+**New Features**
+
+The Dublin release is the third release for ONAP Optimization Framework (OOF).
+
+A summary of features includes
+
+* Support SON (PCI/ANR) optimization using OSDF
+* Implement encryption for OSDF internal and external communication
+
+* Platform Maturity Level 1
+ * ~65.1+ unit test coverage
+
+The Dublin release for OOF delivered the following Epics.
+
+ * [OPTFRA-426] Track the changes to CMSO to support change management schedule optimization
+ * [OPTFRA-424] Extend OOF to support traffic distribution optimization
+ * [OPTFRA-422] Move OOF projects' CSIT to run on OOM
+ * [OPTFRA-276] Implementing a POC for 5G SON Optimization
+ * [OPTFRA-270] This epic captures stories related to maintaining current S3P levels of the project as new functional requirements are supported
+
+
+**Bug Fixes**
+
+* The full list of implemented user stories and epics is available on `DUBLIN RELEASE <https://jira.onap.org/projects/OPTFRA/versions/10463>`_
+
+**Known Issues**
+
+
+
+**Security Notes**
+
+*Fixed Security Issues*
+
+*Known Security Issues*
+
+ * [`OJSI-122 <https://jira.onap.org/browse/OJSI-122>`_] In default deployment OPTFRA (oof-osdf) exposes HTTP port 30248 outside of cluster.
+
+*Known Vulnerabilities in Used Modules*
+
+OPTFRA osdf code has been formally scanned during build time using NexusIQ and no Critical vulnerability was found.
+The OPTF open Critical security vulnerabilities and their risk assessment have been documented as part of the `project <https://wiki.onap.org/pages/viewpage.action?pageId=64005463>`__.
+
+Quick Links:
+ - `OPTFRA project page <https://wiki.onap.org/display/DW/Optimization+Framework+Project>`__
+ - `Passing Badge information for OPTFRA <https://bestpractices.coreinfrastructure.org/en/projects/1720>`__
+ - `Project Vulnerability Review Table for OPTF <https://wiki.onap.org/pages/viewpage.action?pageId=64005463>`__
+
+**Upgrade Notes**
+
+None.
+
+**Deprecation Notes**
+
+None.
+
+**Other**
+
+None
+
+Version: 3.0.1
+--------------
+
+:Release Date: 2019-01-31 (Casablanca Maintenance Release)
+
+The following items were deployed with the Casablanca Maintenance Release:
+
+
+**New Features**
+
+None.
+
+**Bug Fixes**
+
+* [OPTFRA-401] - Need flavor id while launching vm.
+
+
+
+Version: 3.0.0
+--------------
+
+:Release Date: 2018-11-30 (Casablanca Release)
+
+**New Features**
+
+The Casablanca release is the second release for ONAP Optimization Framework (OOF).
+
+A summary of features includes
+
+* Homing enhancements for improving service deployability
+ * Discovering and reusing shared resources when processing multiple homing requests in parallel
+ * Considering Latency Reduction (in addition to geographical distances) for homing optimization
+ * Enhanced capacity checks during VNF homing
+ * Asynchronous communication between HAS components
+* OOF Casablanca S3P Usability enhancement
+ * Adherence to ONAP API Common Versioning Strategy (CVS) Proposal
+ * Move all internal and external facing APIs to Swagger 2.0
+* OOF Casablanca S3P Performance enhancements
+ * Creating a plan for performance improvements based on the baseline measured metrics
+* OOF development platform hardening
+ * Deployment scripts
+ * Fix Build Docker image script for supporting multiple versions
+ * Fix OOM, HEAT deployment scripts (versioning)
+ * CSIT functional tests for each repo
+ * CI Jobs for different streams (Beijing, master etc)
+ * Clean up nexus binaries and maven versioning
+* Integrate OOF with Certificate and Secret Management Service (CSM)
+* Support SON (PCI) optimization using OSDF
+
+* Platform Maturity Level 1
+ * ~65.1+ unit test coverage
+
+The Casablanca release for OOF delivered the following Epics.
+
+ * [OPTFRA-273] - Epic Name: OOF Casablanca S3P Manageability enhancement
+ * [OPTFRA-270] - Maintain current S3P levels
+ * [OPTFRA-271] - OOF Casablanca S3P Security enhancement
+ * [OPTFRA-267] - OOF - HPA Enhancements
+ * [OPTFRA-276] - Implementing a POC for 5G SON Optimization
+
+
+**Bug Fixes**
+
+* The full list of implemented user stories and epics is available on `CASABLANCA RELEASE <https://jira.onap.org/projects/OPTFRA/versions/10445>`_
+
+**Known Issues**
+
+ * [OPTFRA-223] - On boarding and testing AAF certificates for OSDF.
+ * [OPTFRA-293] - Implement encryption for all OSDF internal and external communication
+ * [OPTFRA-329] - role based access control for OSDF-Policy interface
+
+**Security Notes**
+
+OPTFRA osdf code has been formally scanned during build time using NexusIQ and no Critical vulnerability was found.
+The OPTF open Critical security vulnerabilities and their risk assessment have been documented as part of the `project <https://wiki.onap.org/pages/viewpage.action?pageId=43385924>`__.
+
+Quick Links:
+ - `OPTFRA project page <https://wiki.onap.org/display/DW/Optimization+Framework+Project>`_
+ - `Passing Badge information for OPTFRA <https://bestpractices.coreinfrastructure.org/en/projects/1720>`_
+ - `Project Vulnerability Review Table for OPTF <https://wiki.onap.org/pages/viewpage.action?pageId=43385924>`_
+
+**Upgrade Notes**
+
+None.
+
+**Deprecation Notes**
+
+None.
+
+**Other**
+
+None
+
+Version: 2.0.0
--------------
:Release Date: 2018-06-07
@@ -15,7 +766,7 @@ Version: 1.1.1
**New Features**
-The ONAP Optimization Framework (OOF) is new in Beijing. A summary of features includes:
+The ONAP Optimization Framework (OOF) is new in Beijing. A summary of features includes:
* Baseline HAS functionality
* support for VCPE use case
@@ -23,37 +774,28 @@ The ONAP Optimization Framework (OOF) is new in Beijing. A summary of features i
* Integration with OOF OSDF, SO, Policy, AAI, and Multi-Cloud
* Platform Maturity Level 1
* ~50%+ unit test coverage
-
-The Beijing release for OOF delivered the following Epics.
- * [OPTFRA-2] - On-boarding and Stabilization of the OOF seed code
+The Beijing release for OOF delivered the following Epics.
+ * [OPTFRA-2] - On-boarding and Stabilization of the OOF seed code
* [OPTFRA-6] - Integrate OOF with other ONAP components
-
* [OPTFRA-7] - Integration with R2 Use Cases [HPA, Change Management, Scaling]
-
* [OPTFRA-20] - OOF Adapters for Retrieving and Resolving Policies
-
* [OPTFRA-21] - OOF Packaging
-
* [OPTFRA-28] - OOF Adapters for Beijing Release (Policy, SDC, A&AI, Multi Cloud, etc.)
-
* [OPTFRA-29] - Policies and Specifications for Initial Applications [Change Management, HPA]
-
* [OPTFRA-32] - Platform Maturity Requirements for Beijing release
-
* [OPTFRA-33] - OOF Support for HPA
-
* [OPTFRA-105] - All Documentation Related User Stories and Tasks
**Bug Fixes**
-None. Initial release R2 Beijing. No previous versions
+None. Initial release R2 Beijing. No previous versions
**Known Issues**
-None.
+None.
**Security Notes**
@@ -61,16 +803,15 @@ OPTFRA code has been formally scanned during build time using NexusIQ and no Cri
Quick Links:
- `OPTFRA project page <https://wiki.onap.org/display/DW/Optimization+Framework+Project>`_
-
- `Passing Badge information for OPTFRA <https://bestpractices.coreinfrastructure.org/en/projects/1720>`_
**Upgrade Notes**
-None. Initial release R2 Beijing. No previous versions
+None. Initial release R2 Beijing. No previous versions
**Deprecation Notes**
-None. Initial release R2 Beijing. No previous versions
+None. Initial release R2 Beijing. No previous versions
**Other**
diff --git a/docs/sections/swaggerdoc/oof-osdf-has-api.json b/docs/sections/swaggerdoc/oof-osdf-has-api.json
deleted file mode 100644
index 2fe2b97..0000000
--- a/docs/sections/swaggerdoc/oof-osdf-has-api.json
+++ /dev/null
@@ -1,587 +0,0 @@
-{
- "swagger" : "2.0",
- "info" : {
- "description" : "This is the ONAP OOF OSDF (Optimization Service Design Framework) API",
- "version" : "1.0.0",
- "title" : "OSDF API",
- "contact" : {
- "email" : "frank.sandoval@oamtechnologies.com"
- },
- "license" : {
- "name" : "Apache 2.0",
- "url" : "http://www.apache.org/licenses/LICENSE-2.0.html"
- }
- },
- "securityDefinitions" : {
- "basicAuth" : {
- "type" : "basic",
- "description" : "HTTP Basic Auth"
- }
- },
- "security" : [ {
- "basicAuth" : [ ]
- } ],
- "paths" : {
- "/v2/placement" : {
- "post" : {
- "summary" : "create/update a placement",
- "operationId" : "createPlacement",
- "description" : "create/update a placement",
- "consumes" : [ "application/json" ],
- "produces" : [ "application/json" ],
- "parameters" : [ {
- "in" : "body",
- "name" : "placementRequest",
- "description" : "placement request",
- "schema" : {
- "$ref" : "#/definitions/PlacementRequest"
- }
- } ],
- "responses" : {
- "201" : {
- "description" : "An optimization solution is found."
- },
- "202" : {
- "description" : "An optimization request is accepted"
- },
- "400" : {
- "description" : "bad request"
- },
- "401" : {
- "description" : "Request body is not compliant with the API definition"
- },
- "404" : {
- "description" : "The server cannot find the requested URI"
- },
- "405" : {
- "description" : "The requested method is not supported by a server."
- },
- "500" : {
- "description" : "The server encountered an internal server error or timed out"
- }
- }
- }
- }
- },
- "definitions" : {
- "PlacementRequest" : {
- "type" : "object",
- "required" : [ "requestInfo", "placementInfo", "licenseInfo", "serviceInfo" ],
- "properties" : {
- "requestInfo" : {
- "$ref" : "#/definitions/RequestInfo"
- },
- "placementInfo" : {
- "$ref" : "#/definitions/PlacementInfo"
- },
- "licenseInfo" : {
- "$ref" : "#/definitions/LicenseInfo"
- },
- "serviceInfo" : {
- "$ref" : "#/definitions/ServiceInfo"
- }
- }
- },
- "RequestInfo" : {
- "type" : "object",
- "required" : [ "transactionId", "requestId", "callbackUrl", "sourceId", "requestType", "optimizers", "timeout" ],
- "properties" : {
- "transactionId" : {
- "type" : "string",
- "format" : "uuid",
- "description" : "unique ID to track an ONAP transaction",
- "example" : "d290f1ee-6c54-4b01-90e6-d701748f0851"
- },
- "requestId" : {
- "type" : "string",
- "format" : "uuid",
- "description" : "A unique ID to track multiple requests associated with a transaction",
- "example" : "d290f1ee-6c54-4b01-90e6-d701748f0851"
- },
- "callbackUrl" : {
- "type" : "string",
- "format" : "url",
- "description" : "The end point of a callback service where recommendations are posted.",
- "example" : "myDomain.com/myCallback"
- },
- "callbackHeader" : {
- "type" : "string",
- "description" : "JSON blob. The header information a client expecting in a async callback.",
- "example" : {
- "blob" : "content"
- }
- },
- "sourceId" : {
- "type" : "string",
- "description" : "The unique ID of a client making an optimization call.",
- "example" : "d290f1ee-6c54-4b01-90e6-d701748f0851"
- },
- "requestType" : {
- "type" : "string",
- "enum" : [ "create", "update", "delete" ],
- "description" : "The type of a request",
- "example" : "create"
- },
- "numSolutions" : {
- "type" : "integer",
- "description" : "Expected number of solutions.",
- "example" : 1
- },
- "optimizers" : {
- "type" : "array",
- "items" : {
- "type" : "string",
- "enum" : [ "placement" ]
- },
- "description" : "A list of optimization services.",
- "example" : "placement"
- },
- "timeout" : {
- "type" : "integer",
- "description" : "A tolerance window (in second) for expecting solutions.",
- "example" : 5
- }
- }
- },
- "PlacementInfo" : {
- "type" : "object",
- "required" : [ "requestParameters", "placementDemands" ],
- "properties" : {
- "requestParameters" : {
- "type" : "string",
- "description" : "JSON blob. A service ordering information",
- "example" : {
- "blob" : "content"
- }
- },
- "placementDemands" : {
- "type" : "array",
- "items" : {
- "$ref" : "#/definitions/PlacementDemand"
- },
- "description" : "The resource information for a placement service"
- },
- "subscriberInfo" : {
- "type" : "object",
- "items" : {
- "$ref" : "#/definitions/SubscriberInfo"
- },
- "description" : "The information of a service subscriber."
- }
- }
- },
- "PlacementDemand" : {
- "type" : "object",
- "required" : [ "resourceModuleName", "serviceResourceId", "resourceModelInfo" ],
- "properties" : {
- "resourceModuleName" : {
- "type" : "string",
- "description" : "A resource name as defined in a service mode",
- "example" : "myResourceName"
- },
- "serviceResourceId" : {
- "type" : "string",
- "description" : "A unique resource Id with a local scope between client and OOF.",
- "example" : "myResourceId"
- },
- "givenPlacement" : {
- "type" : "object",
- "additionalProperties" : {
- "type" : "object",
- "properties" : {
- "key" : {
- "type" : "string"
- },
- "value" : {
- "type" : "string"
- }
- }
- },
- "description" : "placement parameters defined in the ordering system, keyname include tenantId",
- "example" : {
- "tenantId" : "1"
- }
- },
- "resourceModelInfo" : {
- "$ref" : "#/definitions/ModelMetaData",
- "description" : "Resource model information as defined in SDC"
- },
- "existingCandidates" : {
- "$ref" : "#/definitions/Candidates",
- "description" : "The existing placement information of a resource."
- },
- "excludedCandidates" : {
- "$ref" : "#/definitions/Candidates",
- "description" : "Candidates that need to be excluded from solutions."
- },
- "requiredCandidates" : {
- "$ref" : "#/definitions/Candidates",
- "description" : "Candidates that must be included in solutions."
- }
- }
- },
- "ModelMetaData" : {
- "type" : "object",
- "required" : [ "modelInvariantId", "modelVersionId" ],
- "properties" : {
- "modelInvariantId" : {
- "type" : "string",
- "description" : "A model invariant Id as defined in a service model.",
- "example" : "my model invariant Id"
- },
- "modelVersionId" : {
- "type" : "string",
- "description" : "A unique model Id as defined in a service model.",
- "example" : "my unique model Id"
- },
- "modelName" : {
- "type" : "string",
- "description" : "A model name as defined in a service model",
- "example" : "my model name"
- },
- "modelType" : {
- "type" : "string",
- "description" : "A model type as defined in a service model.",
- "example" : "my model type"
- },
- "modelVersion" : {
- "type" : "string",
- "description" : "A model version as defined in a service model.",
- "example" : "my model version"
- },
- "modelCustomizationName" : {
- "type" : "string",
- "description" : "A model customization name as defined in a service model.",
- "example" : "my model customization"
- }
- }
- },
- "Candidates" : {
- "type" : "object",
- "required" : [ "identifierType", "identifiers" ],
- "properties" : {
- "identifierType" : {
- "type" : "string",
- "enum" : [ "service_instance_id", "vnf_name", "cloud_region_id" ],
- "description" : "The type of a candidate.",
- "example" : "service_instance_id"
- },
- "identifiers" : {
- "type" : "array",
- "items" : {
- "type" : "string"
- },
- "description" : "A list of identifiers.",
- "example" : "candidateId"
- },
- "cloudOwner" : {
- "type" : "string",
- "description" : "The name of a cloud owner. Only required if identifierType is cloud_region_id",
- "example" : "cloud_owner"
- }
- }
- },
- "SubscriberInfo" : {
- "type" : "object",
- "required" : [ "globalSubscriberId", "subscriberName", "subscriberCommonSiteId" ],
- "properties" : {
- "globalSubscriberId" : {
- "type" : "string",
- "description" : "An ID of a subscriber.",
- "example" : "subscriber_id"
- },
- "subscriberName" : {
- "type" : "string",
- "description" : "The name of a subscriber. If the name is not known, the value must be 'unknown'",
- "example" : "subscriber_name"
- },
- "subscriberCommonSiteId" : {
- "type" : "string",
- "description" : "Id representing a subscriber location",
- "example" : "subscriber_location_id"
- }
- }
- },
- "LicenseInfo" : {
- "type" : "object",
- "required" : [ "licenseDemands" ],
- "properties" : {
- "licenseDemands" : {
- "type" : "array",
- "items" : {
- "$ref" : "#/definitions/LicenseDemands"
- },
- "description" : "A list of resources for license selection"
- }
- }
- },
- "LicenseDemands" : {
- "type" : "object",
- "required" : [ "resourceModuleName", "serviceResourceId", "resourceModelInfo" ],
- "properties" : {
- "resourceModuleName" : {
- "type" : "string",
- "description" : "A resource name as defined in a service model.",
- "example" : "service_instance_id"
- },
- "serviceResourceId" : {
- "type" : "string",
- "description" : "A unique resource Id with a local scope between client and OOF.",
- "example" : "service_instance_id"
- },
- "resourceModelInfo" : {
- "$ref" : "#/definitions/ModelMetaData",
- "description" : "Resource model information as defined in a service model."
- },
- "existingLicenses" : {
- "$ref" : "#/definitions/LicenseModel",
- "description" : "Existing license information assigned to a resource."
- }
- }
- },
- "LicenseModel" : {
- "type" : "object",
- "required" : [ "entitlementPoolUUID", "licenseKeyGroupUUID" ],
- "properties" : {
- "entitlementPoolUUID" : {
- "type" : "array",
- "items" : {
- "type" : "string",
- "format" : "uuid"
- },
- "description" : "Entitlement pool UUIDs associated with a resource.",
- "example" : "candidateId"
- },
- "licenseKeyGroupUUID" : {
- "type" : "array",
- "items" : {
- "type" : "string",
- "format" : "uuid"
- },
- "description" : "License key groups associated with a resource",
- "example" : "candidateId"
- }
- }
- },
- "SynchronousResponse" : {
- "type" : "object",
- "required" : [ "requestId", "transactionId", "requestStatus" ],
- "properties" : {
- "requestId" : {
- "type" : "string",
- "format" : "uuid",
- "description" : "A unique Id for an ONAP transaction",
- "example" : "ONAP transaction id"
- },
- "transactionId" : {
- "type" : "string",
- "format" : "uuid",
- "description" : "A unique ID to track multiple requests associated with a transaction.",
- "example" : "requests id"
- },
- "statusMessage" : {
- "type" : "string",
- "description" : "Reasoning if a requestStatus is failure.",
- "example" : "requestStatus"
- },
- "requestStatus" : {
- "type" : "string",
- "enum" : [ "success", "failure" ],
- "description" : "The status of a request.",
- "example" : "success"
- }
- }
- },
- "AsynchronousResponse" : {
- "type" : "object",
- "required" : [ "requestId", "transactionId", "requestStatus", "solutions" ],
- "properties" : {
- "requestId" : {
- "type" : "string",
- "format" : "uuid",
- "description" : "A unique Id for an ONAP transaction",
- "example" : "ONAP transaction id"
- },
- "transactionId" : {
- "type" : "string",
- "format" : "uuid",
- "description" : "A unique ID to track multiple requests associated with a transaction.",
- "example" : "requests id"
- },
- "statusMessage" : {
- "type" : "string",
- "description" : "Reasoning if a requestStatus is failure.",
- "example" : "requestStatus"
- },
- "requestStatus" : {
- "type" : "string",
- "enum" : [ "success", "failure" ],
- "description" : "The status of a request.",
- "example" : "success"
- },
- "solutions" : {
- "$ref" : "#/definitions/Solutions",
- "description" : "Solutions related to a request."
- }
- }
- },
- "Solutions" : {
- "type" : "object",
- "required" : [ "placementSolutions", "licenseSolutions" ],
- "properties" : {
- "placementSolutions" : {
- "type" : "array",
- "items" : {
- "$ref" : "#/definitions/ComprehensiveSolution"
- },
- "description" : "A list of placement solutions."
- },
- "licenseSolutions" : {
- "type" : "array",
- "items" : {
- "$ref" : "#/definitions/LicenseSolution"
- },
- "description" : "A list of license solutions."
- }
- }
- },
- "ComprehensiveSolution" : {
- "type" : "object",
- "required" : [ "placementSolutions" ],
- "properties" : {
- "placementSolutions" : {
- "type" : "array",
- "items" : {
- "$ref" : "#/definitions/PlacementSolution"
- },
- "description" : "A list of placement solutions."
- }
- }
- },
- "PlacementSolution" : {
- "type" : "object",
- "required" : [ "resourceModuleName", "serviceResourceId", "identifierType", "identifier" ],
- "properties" : {
- "resourceModuleName" : {
- "type" : "string",
- "description" : "The name of a resource as defined in the service model",
- "example" : "resource name"
- },
- "serviceResourceId" : {
- "type" : "string",
- "description" : "A resource Id as defined in a service model.",
- "example" : "resource id"
- },
- "identifierType" : {
- "type" : "string",
- "enum" : [ "service_instance_id" ],
- "description" : "The type of a candidate.",
- "example" : "candidate type"
- },
- "identifier" : {
- "type" : "string",
- "description" : "The id of a candidate.",
- "example" : "candidate id"
- },
- "assignmentInfo" : {
- "type" : "array",
- "items" : {
- "$ref" : "#/definitions/AssignmentInfo"
- },
- "description" : "Additional information related to a candidate."
- }
- }
- },
- "AssignmentInfo" : {
- "type" : "object",
- "required" : [ "key", "value" ],
- "properties" : {
- "key" : {
- "type" : "string",
- "description" : "An attribute name",
- "example" : "attribute name"
- },
- "value" : {
- "type" : "string",
- "description" : "An attribute value.",
- "example" : "attribute value"
- }
- }
- },
- "LicenseSolution" : {
- "type" : "object",
- "required" : [ "resourceModuleName", "serviceResourceId", "entitlementPoolUUID", "licenseKeyGroupUUID", "entitlementPoolInvariantUUID", "licenseKeyGroupInvariantUUID" ],
- "properties" : {
- "resourceModuleName" : {
- "type" : "string",
- "description" : "A resource name as defined in a service",
- "example" : "resource name"
- },
- "serviceResourceId" : {
- "type" : "string",
- "description" : "A resource Id as defined in a service.",
- "example" : "resource Id"
- },
- "entitlementPoolUUID" : {
- "type" : "array",
- "items" : {
- "type" : "string",
- "format" : "uuid"
- },
- "description" : "A list of entitlementPoolUUIDs",
- "example" : "entitlementPoolUUID"
- },
- "licenseKeyGroupUUID" : {
- "type" : "array",
- "items" : {
- "type" : "string",
- "format" : "uuid"
- },
- "description" : "A list of licenseKeyGroupUUID.",
- "example" : "licenseKeyGroupUUID"
- },
- "entitlementPoolInvariantUUID" : {
- "type" : "array",
- "items" : {
- "type" : "string",
- "format" : "uuid"
- },
- "description" : "A list of entitlementPoolInvariantUUID",
- "example" : "entitlementPoolInvariantUUID"
- },
- "licenseKeyGroupInvariantUUID" : {
- "type" : "array",
- "items" : {
- "type" : "string",
- "format" : "uuid"
- },
- "description" : "A list of licenseKeyGroupInvariantUUID",
- "example" : "licenseKeyGroupInvariantUUID"
- }
- }
- },
- "ServiceInfo" : {
- "type" : "object",
- "required" : [ "serviceInstanceId", "modelInfo", "serviceName" ],
- "properties" : {
- "serviceInstanceId" : {
- "type" : "string",
- "description" : "A service instance id associated with a request.",
- "example" : "service_instance_id"
- },
- "modelInfo" : {
- "$ref" : "#/definitions/ModelMetaData",
- "description" : "A list of identifiers."
- },
- "serviceName" : {
- "type" : "string",
- "description" : "The name of a service",
- "example" : "service_name"
- }
- }
- }
- },
- "schemes" : [ "https" ],
- "host" : "virtserver.swaggerhub.com",
- "basePath" : "/oof-osdf/v1"
-} \ No newline at end of file
diff --git a/docs/sections/upgradestrategy.rst b/docs/sections/upgradestrategy.rst
new file mode 100644
index 0000000..6357fac
--- /dev/null
+++ b/docs/sections/upgradestrategy.rst
@@ -0,0 +1,22 @@
+..
+ This work is licensed under a Creative Commons Attribution 4.0
+ International License.
+
+================
+Upgrade Strategy
+================
+
+OSDF can be upgraded in place(remove and replace) or in a blue-green
+strategy.
+
+There is no need for database migration. Since, there is no database
+being used by OSDF.
+
+Supporting Facts
+================
+
+OSDF is a stateless component. It doesn't store any information in the
+database. It holds on to the optimization request in memory only until
+the optimization process is complete. The optimization is done either by
+OSDF itself or other external components(such as HAS) are leveraged for
+optimization.
diff --git a/docs/tox.ini b/docs/tox.ini
new file mode 100644
index 0000000..73e317e
--- /dev/null
+++ b/docs/tox.ini
@@ -0,0 +1,31 @@
+[tox]
+minversion = 1.6
+envlist = docs,docs-linkcheck,docs-spellcheck
+skipsdist = true
+
+[testenv:docs]
+basepython = python3.8
+deps =
+ -r{toxinidir}/requirements-docs.txt
+ -chttps://releases.openstack.org/constraints/upper/yoga
+ -chttps://git.onap.org/doc/plain/etc/upper-constraints.onap.txt?h=master
+commands =
+ sphinx-build -q -b html -n -d {envtmpdir}/doctrees {toxinidir} {toxinidir}/_build/html
+
+[testenv:docs-linkcheck]
+basepython = python3.8
+deps =
+ -r{toxinidir}/requirements-docs.txt
+ -chttps://releases.openstack.org/constraints/upper/yoga
+ -chttps://git.onap.org/doc/plain/etc/upper-constraints.onap.txt?h=master
+commands =
+ sphinx-build -q -b linkcheck -d {envtmpdir}/doctrees {toxinidir} {toxinidir}/_build/linkcheck
+
+[testenv:docs-spellcheck]
+basepython = python3.8
+deps =
+ -r{toxinidir}/requirements-docs.txt
+ -chttps://releases.openstack.org/constraints/upper/yoga
+ -chttps://git.onap.org/doc/plain/etc/upper-constraints.onap.txt?h=master
+commands =
+ sphinx-build -q -b spelling -d {envtmpdir}/doctrees {toxinidir} {toxinidir}/_build/spellcheck