diff options
author | elinuxhenrik <henrik.b.andersson@est.tech> | 2020-11-16 09:31:07 +0100 |
---|---|---|
committer | elinuxhenrik <henrik.b.andersson@est.tech> | 2020-11-16 14:02:09 +0100 |
commit | 6b87e43900b61956ab23d965827fb1306f8db617 (patch) | |
tree | 71742927bdd08a1211a9fe17df78ecc85edbc65a /docs | |
parent | 6e095a089f0ef20094b19f74f2b7b44ec92ad3d9 (diff) |
Add documentation
Change-Id: Ie27c53fcb38ae75b9771a42dc7dec39f4a1fd672
Issue-ID: CCSDK-2966
Signed-off-by: elinuxhenrik <henrik.b.andersson@est.tech>
Diffstat (limited to 'docs')
-rw-r--r-- | docs/.gitignore | 3 | ||||
-rw-r--r-- | docs/_static/css/ribbon.css | 63 | ||||
-rw-r--r-- | docs/_static/favicon.ico | bin | 0 -> 2102 bytes | |||
-rw-r--r-- | docs/_static/logo_onap_2017.png | bin | 0 -> 12278 bytes | |||
-rw-r--r-- | docs/architecture/architecture.rst | 33 | ||||
-rw-r--r-- | docs/conf.py | 34 | ||||
-rw-r--r-- | docs/conf.yaml | 7 | ||||
-rw-r--r-- | docs/consumedapis/consumedapis.rst | 18 | ||||
-rw-r--r-- | docs/guide/developer-guide.rst | 95 | ||||
-rw-r--r-- | docs/humaninterfaces/humaninterfaces.rst | 11 | ||||
-rw-r--r-- | docs/index.rst | 18 | ||||
-rw-r--r-- | docs/media/o-ran-onap-integration.png | bin | 0 -> 218436 bytes | |||
-rw-r--r-- | docs/media/oran_architecture.png | bin | 0 -> 23768 bytes | |||
-rw-r--r-- | docs/media/swagger.png | bin | 0 -> 3590 bytes | |||
-rw-r--r-- | docs/media/yaml_logo.png | bin | 0 -> 3477 bytes | |||
-rw-r--r-- | docs/offeredapis/offeredapis.rst | 83 | ||||
-rw-r--r-- | docs/offeredapis/swagger/a1-adapter-api.json | 378 | ||||
-rw-r--r-- | docs/offeredapis/swagger/pms-api.json | 1259 | ||||
-rw-r--r-- | docs/releasenotes/release-notes.rst | 66 | ||||
-rw-r--r-- | docs/requirements-docs.txt | 17 | ||||
-rw-r--r-- | docs/tox.ini | 22 |
21 files changed, 2107 insertions, 0 deletions
diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 00000000..43ca5b67 --- /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 00000000..6008cb1a --- /dev/null +++ b/docs/_static/css/ribbon.css @@ -0,0 +1,63 @@ +.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: none; +} diff --git a/docs/_static/favicon.ico b/docs/_static/favicon.ico Binary files differnew file mode 100644 index 00000000..cb712ebd --- /dev/null +++ b/docs/_static/favicon.ico diff --git a/docs/_static/logo_onap_2017.png b/docs/_static/logo_onap_2017.png Binary files differnew file mode 100644 index 00000000..5d064f43 --- /dev/null +++ b/docs/_static/logo_onap_2017.png diff --git a/docs/architecture/architecture.rst b/docs/architecture/architecture.rst new file mode 100644 index 00000000..3997950b --- /dev/null +++ b/docs/architecture/architecture.rst @@ -0,0 +1,33 @@ +.. SPDX-License-Identifier: CC-BY-4.0 +.. Copyright 2020 Nordix Foundation +.. _architecture: + + +Architecture +============ + +************ +Introduction +************ + + +The CCSDK ORAN components provides handling of the O-RAN A1 interface. + + +********************************************* +Global NBI architecture for Frankfurt release +********************************************* + +Following illustration provides a global view about Non-Real-Time-RIC architecture, +integration with other ONAP components and API resource/operation provided. + +.. image:: ../media/o-ran-onap-integration.png + :width: 800pt + + +*************** +Developer Guide +*************** + +Technical information about the ORAN components (dependencies, configuration, running & testing) could be found in :ref:`developer_guide`. + diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 00000000..29923a05 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,34 @@ +from docs_conf.conf import * + +branch = 'latest' +master_doc = 'index' + +linkcheck_ignore = [ + 'http://localhost', +] + +extensions = ['sphinx_tabs.tabs', 'sphinxcontrib.redoc',] + +redoc = [ + { + 'name': 'PMS API', + 'page': 'offeredapis/pms-api', + 'spec': './offeredapis/swagger/pms-api.json', + 'embed': True, + }, + { + 'name': 'A1 ADAPTER API', + 'page': 'offeredapis/a1-adapter-api', + 'spec': './offeredapis/swagger/a1-adapter-api.json', + 'embed': True, + } + ] + +redoc_uri = 'https://cdn.jsdelivr.net/npm/redoc@next/bundles/redoc.standalone.js' + +intersphinx_mapping = {} + +html_last_updated_fmt = '%d-%b-%y %H:%M' + +def setup(app): + app.add_css_file("css/ribbon.css") diff --git a/docs/conf.yaml b/docs/conf.yaml new file mode 100644 index 00000000..ab592813 --- /dev/null +++ b/docs/conf.yaml @@ -0,0 +1,7 @@ +--- +project_cfg: onap +project: onap + +# Change this to ReleaseBranchName to modify the header +default-version: latest +# diff --git a/docs/consumedapis/consumedapis.rst b/docs/consumedapis/consumedapis.rst new file mode 100644 index 00000000..bcf7267e --- /dev/null +++ b/docs/consumedapis/consumedapis.rst @@ -0,0 +1,18 @@ +.. SPDX-License-Identifier: CC-BY-4.0 +.. Copyright 2020 Nordix Foundation + +Consumed APIs +============= + + +Policy Management Service application is interacting with one ONAP API. + +******* +CBS API +******* + +This API is used to get the dynamic configuration of the service, such as available Near-RT RICs. + +:: + + CBS_GET_ALL diff --git a/docs/guide/developer-guide.rst b/docs/guide/developer-guide.rst new file mode 100644 index 00000000..f067a3fa --- /dev/null +++ b/docs/guide/developer-guide.rst @@ -0,0 +1,95 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 +.. Copyright (C) 2020 Nordix Foundation. + +.. _developer_guide: + +Developer Guide +=============== + +This document provides a quickstart for developers of the CCSDK ORAN parts. + +Source tree ++++++++++++ + +This application provides CCSDK Policy Management Service and A1 Adapter as main functional resources. +Each resource is implemented independently in a package corresponding to its name. + +A1 Policy Management Service +++++++++++++++++++++++++++++ + +The CCSDK Policy Management Service (PMS) is a Java 11 web application built over Spring Framework. +Using Spring Boot dependencies, it runs as a standalone application. + +PMS provides a REST API for management of policices. It provides support for: + + * Supervision of clients (R-APPs) to eliminate stray policies in case of failure + * Consistency monitoring of the SMO view of policies and the actual situation in the RICs + * Consistency monitoring of RIC capabilities (policy types) + * Policy configuration. This includes: + + * One REST API towards all RICs in the network + * Query functions that can find all policies in a RIC, all policies owned by a service (R-APP), all policies of a type etc. + * Maps O1 resources (ManagedElement) as defined in O1 to the controlling RIC. + +The Policy Management Service can be accessed over the REST API. See :ref:`pms_api` for how to use the API. + +Dependencies +------------ + +This project uses various frameworks which are managed with Maven +dependency management tool (see *pom.xml* file at root level) : + +- Swagger annotations +- `Spring Framework <https://github.com/spring-projects/spring-boot>`_ +- `Springfox <https://github.com/springfox/springfox>`_ Automated JSON API documentation for API's built with Spring +- `Immutable <https://immutables.github.io/>`_ to generate simple, safe and consistent value objects +- `JSON in Java <https://github.com/stleary/JSON-java>`_ to parse JSON documents into Java objects +- `Apache Commons Net <https://github.com/apache/commons-net>`_ for network utilities and protocol implementations +- `DCAE SDK <https://github.com/onap/dcaegen2-services-sdk>`_ to get configuration from CBS +- `Lombok <https://github.com/rzwitserloot/lombok>`_ to generate code, such as getters and setters +- `Awaitility <https://github.com/awaitility/awaitility>`_ to test asynchronous functionality + +Configuration +------------- + +There are two configuration files for PMS, *config/application_configuration.json* and *config/application.yaml*. +The first one contains configuration of data needed by the application, such as which Near-RT RICs +that are available. The second contains logging and security configurations. + +Configuration of certs +---------------------- + +The Policy Management Service uses the default keystore and truststore that are built into the container. The paths and +passwords for these stores are located in a yaml file: :: + + oran/a1-policy-management/config/application.yaml + +There is also Policy Management Service's own cert in the default truststore for mocking purposes and unit-testing +(ApplicationTest.java). + +The default keystore, truststore, and application.yaml files can be overridden by mounting new files using the "volumes" +field of docker-compose or docker run command. + +Assuming that the keystore, truststore, and application.yaml files are located in the same directory as docker-compose, +the volumes field should have these entries: :: + + `volumes:` + `- ./new_keystore.jks:/opt/app/policy-agent/etc/cert/keystore.jks:ro` + + `- ./new_truststore.jks:/opt/app/policy-agent/etc/cert/truststore.jks:ro` + + `- ./new_application.yaml:/opt/app/policy-agent/config/application.yaml:ro` + +The target paths in the container should not be modified. + +Example docker run command for mounting new files (assuming they are located in the current directory): :: + + docker run -p 8081:8081 -p 8433:8433 --name=policy-agent-container --network=nonrtric-docker-net --volume "$PWD/new_keystore.jks:/opt/app/policy-agent/etc/cert/keystore.jks" --volume "$PWD/new_truststore.jks:/opt/app/policy-agent/etc/cert/truststore.jks" --volume "$PWD/new_application.yaml:/opt/app/policy-agent/config/application.yaml" o-ran-sc/nonrtric-policy-agent:2.1.0-SNAPSHOT + +A1 Adapter (Internal) ++++++++++++++++++++++ + +The O-RAN A1 Adapter provides an internal REST CONF API for management of A1 policices, useful for test and verification. + +The A1 Adapter can be accessed over the REST CONF API. See :ref:`a1_adapter_api` for how to use the API. diff --git a/docs/humaninterfaces/humaninterfaces.rst b/docs/humaninterfaces/humaninterfaces.rst new file mode 100644 index 00000000..ab7d421f --- /dev/null +++ b/docs/humaninterfaces/humaninterfaces.rst @@ -0,0 +1,11 @@ +.. SPDX-License-Identifier: CC-BY-4.0 +.. Copyright 2020 Nordix Foundation + + +Human Interfaces +================ + +The NON-RT RIC Control Panel in O-RAN-SC can be used to interact with the Policy Management Service. +See `NON-RT RIC Control Panel repo <https://gerrit.o-ran-sc.org/r/admin/repos/portal/nonrtric-controlpanel>`_. + +Any "Rest Client" application may be used (Postman, ...) to interact with the Policy Management Service application. diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 00000000..613ff566 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,18 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 +.. Copyright 2020 Nordix Foundation. +.. _master_index: + +ccsdk/oran +---------- + +.. toctree:: + :maxdepth: 1 + :caption: Contents: + + ./architecture/architecture.rst + ./guide/developer-guide.rst + ./offeredapis/offeredapis.rst + ./consumedapis/consumedapis.rst + ./humaninterfaces/humaninterfaces.rst + ./releasenotes/release-notes.rst diff --git a/docs/media/o-ran-onap-integration.png b/docs/media/o-ran-onap-integration.png Binary files differnew file mode 100644 index 00000000..5c66ae62 --- /dev/null +++ b/docs/media/o-ran-onap-integration.png diff --git a/docs/media/oran_architecture.png b/docs/media/oran_architecture.png Binary files differnew file mode 100644 index 00000000..3f99e090 --- /dev/null +++ b/docs/media/oran_architecture.png diff --git a/docs/media/swagger.png b/docs/media/swagger.png Binary files differnew file mode 100644 index 00000000..f5a9e0c0 --- /dev/null +++ b/docs/media/swagger.png diff --git a/docs/media/yaml_logo.png b/docs/media/yaml_logo.png Binary files differnew file mode 100644 index 00000000..0492eb4b --- /dev/null +++ b/docs/media/yaml_logo.png diff --git a/docs/offeredapis/offeredapis.rst b/docs/offeredapis/offeredapis.rst new file mode 100644 index 00000000..14fb881a --- /dev/null +++ b/docs/offeredapis/offeredapis.rst @@ -0,0 +1,83 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 + International License. +.. http://creativecommons.org/licenses/by/4.0 +.. Copyright 2020 Nordix Foundation + +.. _offered_apis: + + +Offered APIs +============ + +Introduction +************ + +The north bound REST API of the Policy Management Service provides convenient methods to handle policies. + + +Global ORAN architecture +************************ + +Following illustration provides a global view about **ORAN** architecture, +integration with other ONAP components and API resource/operation provided. + +.. image:: ../media/oran_architecture.png + :width: 500pt + + +API Table +********* + +.. |swagger-icon| image:: ../media/swagger.png + :width: 40px + +.. csv-table:: + :header: "API name", "|swagger-icon|" + :widths: 10,5 + + "PMS API", ":download:`link <./swagger/pms-api.json>`" + "A1 ADAPTER API (Internal)", ":download:`link <./swagger/a1-adapter-api.json>`" + + +.. _pms_api: + +PMS API +....... +`PMS API <./pms-api.html>`_ + +.. _a1_adapter_api: + +A1 ADAPTER API +.............. +`A1 ADAPTER API (Internal) <./a1-adapter-api.html>`_ + + +API Version +*********** + +APIs are described with a state version with "v" following the API Name, +e.g.: ``v2/policy``. +The schema associated with a REST API must have its version number aligned +with that of the REST API. + +The version number has major, minor and revision numbers. E.g. v1.0.0 +The version number (without the revision number) is held in the URI. + +The major version number is incremented for an incompatible change. +The minor version number is incremented for a compatible change. +For minor modifications of the API, version numbering must not be updated, +provided the following backward compatibility rules are respected: + +- New elements in a data type must be optional (``minOccurs=0``) +- Changes in the cardinality of an attribute in a data type must be from + mandatory to optional or from lower to greater +- New attributes defined in an element must be optional (absence of + ``use="required"``). +- If new enumerated values are included, the former ones and its meaning must + be kept. +- If new operations are added, the existing operations must be kept +- New parameters added to existing operations must be optional and existing + parameters must be kept + +For major modifications of the API, not backward compatible and forcing client +implementations to be changed, the version number must be updated. diff --git a/docs/offeredapis/swagger/a1-adapter-api.json b/docs/offeredapis/swagger/a1-adapter-api.json new file mode 100644 index 00000000..12951279 --- /dev/null +++ b/docs/offeredapis/swagger/a1-adapter-api.json @@ -0,0 +1,378 @@ +{ + "apiVersion": "1.0.0", + "swagger": "2.0", + "basePath": "/", + "info": { + "x-audience": "external-partner", + "contact": { + "name": "Ericsson Software Technology", + "email": "nonrtric@est.tech" + }, + "description": "The O-RAN A1 Adapter provides an internal REST CONF API for management of A1 policices, useful for test and verification. <b>Note!</b> For production, the https://docs.onap.org/projects/onap-ccsdk-oran/en/latest/offeredapis/pms-api.html should be used!", + "title": "A1 Adapter", + "version": "1.1.0" + }, + "paths": { + "/restconf/operations/A1-ADAPTER-API:putA1Policy": {"post": { + "summary": "Create or update a policy", + "description": "<b>Note!</b> For production, the https://docs.onap.org/projects/onap-ccsdk-oran/en/latest/offeredapis/pms-api.html PUT /policy method should be used!", + "nickname": "putA1Policy", + "produces": "application/json", + "responses": { + "200": { + "schema": {"$ref": "#/models/(putA1Policy)output"}, + "description": "Policy created/updated", + "examples": { + "application/json": { + "A1-ADAPTER-API:body": {}, + "A1-ADAPTER-API:http-status": 200 + } + } + } + }, + "parameters": [ + { + "schema": {"$ref": "#/models/(putA1Policy)input"}, + "in": "body", + "name": null, + "description": null, + "required": false + } + ] + } + }, + "/operations/A1-ADAPTER-API:getA1Policy": {"post": { + "summary": "Get policy configuration/s", + "description": "<b>Note!</b> For production, the https://docs.onap.org/projects/onap-ccsdk-oran/en/latest/offeredapis/pms-api.html GET /policy method should be used!", + "nickname": "getA1Policy", + "produces": "application/json", + "responses": { + "200": { + "schema": {"$ref": "#/models/(getA1Policy)output"}, + "description": "Policy found", + "examples": { + "application/json": { + "A1-ADAPTER-API:body": { + "id": "Policy 1", + "json": { + "scope": { + "ueId": "UE1 ", + "cellId": "Cell 1" + }, + "qosObjectives": { + "gfbr": 319.5, + "mfbr": 782.75, + "priorityLevel": 268.5, + "pdb": 44.0 + }, + "qoeObjectives": { + "qoeScore": 329.0, + "initialBuffering": 27.75, + "reBuffFreq": 539.0, + "stallRatio": 343.0 + }, + "resources": [] + }, + "ownerServiceName": "Service 1", + "ric": "ric1", + "type": "STD_PolicyModelUnconstrained_0.2.0", + "lastModified": "Wed, 01 Apr 2020 07:45:45 GMT" + }, + "A1-ADAPTER-API:http-status": 200 + } + } + } + }, + "parameters": [ + { + "schema": {"$ref": "#/models/(getA1Policy)input"}, + "in": "body", + "name": null, + "description": null, + "required": false + } + ] + } + }, + "/restconf/operations/A1-ADAPTER-API:getA1PolicyStatus": {"post": { + "summary": "Get a policy status", + "description": "<b>Note!</b> For production, the https://docs.onap.org/projects/onap-ccsdk-oran/en/latest/offeredapis/pms-api.html GET /policy-status method should be used!", + "nickname": "getA1PolicyStatus", + "produces": "application/json", + "responses": { + "200": { + "schema": {"$ref": "#/models/(getA1PolicyStatus)output"}, + "description": "Policy status", + "examples": { + "application/json": { + "A1-ADAPTER-API:body": { + "enforceStatus": "UNDEFINED" + }, + "A1-ADAPTER-API:http-status": 200 + } + } + } + }, + "parameters": [ + { + "schema": {"$ref": "#/models/(getA1PolicyStatus)input"}, + "in": "body", + "name": null, + "description": null, + "required": false + } + ] + } + }, + "/restconf/operations/A1-ADAPTER-API:getA1PolicyType": {"post": { + "summary": "Get a policy type schema definition", + "description": "<b>Note!</b> For production, the https://docs.onap.org/projects/onap-ccsdk-oran/en/latest/offeredapis/pms-api.html GET /policy-types method should be used!", + "nickname": "getA1PolicyType", + "produces": "application/json", + "responses": { + "200": { + "schema": {"$ref": "#/models/(getA1PolicyType)output"}, + "description": "Policy schema", + "examples": { + "application/json": { + "A1-ADAPTER-API:body": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Example_QoETarget_1.0.0", + "description": "Example QoE Target policy type", + "type": "object", + "properties": { + "scope": { + "type": "object", + "properties": { + "ueId": { + "type": "string" + }, + "sliceId": { + "type": "string" + }, + "qosId": { + "type": "string" + }, + "cellId": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "ueId", + "sliceId" + ] + }, + "statement": { + "type": "object", + "properties": { + "qoeScore": { + "type": "number" + }, + "initialBuffering": { + "type": "number" + }, + "reBuffFreq": { + "type": "number" + }, + "stallRatio": { + "type": "number" + } + }, + "minProperties": 1, + "additionalProperties": false + } + } + }, + "A1-ADAPTER-API:http-status": 200 + } + } + } + }, + "parameters": [ + { + "schema": {"$ref": "#/models/(getA1PolicyType)input"}, + "in": "body", + "name": null, + "description": null, + "required": false + } + ] + } + }, + "/restconf/operations/A1-ADAPTER-API:deleteA1Policy": {"post": { + "summary": "Delete a policy", + "description": "<b>Note!</b> For production, the https://docs.onap.org/projects/onap-ccsdk-oran/en/latest/offeredapis/pms-api.html DELETE /policy method should be used!", + "nickname": "deleteA1Policy", + "produces": "application/json", + "responses": { + "200": { + "schema": {"$ref": "#/models/(deleteA1Policy)output"}, + "description": "Policy deleted", + "examples": { + "application/json": { + "A1-ADAPTER-API:body": {}, + "A1-ADAPTER-API:http-status": 200 + } + } + } + }, + "parameters": [ + { + "schema": {"$ref": "#/models/(deleteA1Policy)input"}, + "in": "body", + "name": null, + "description": null, + "required": false + } + ] + } + } + }, + "models": { + "(putA1Policy)input": { + "$schema": "http://json-schema.org/draft-04/schema", + "type": "object", + "properties": { + "A1-ADAPTER-API:near-rt-ric-url": { + "required": false, + "type": "Some near-rt-ric-url", + "example": "http://nearRtRic-sim1:8085/a1-p/policytypes/11/policies/5000" + }, + "A1-ADAPTER-API:body": { + "required": false, + "type": "Some body", + "example": { + "blocking_rate":20, + "enforce":true, + "trigger_threshold":10, + "window_length":10 + } + } + }, + "id": "(putA1Policy)input" + }, + "(putA1Policy)output": { + "$schema": "http://json-schema.org/draft-04/schema", + "type": "object", + "properties": { + "A1-ADAPTER-API:body": { + "required": false, + "type": "Some body" + }, + "A1-ADAPTER-API:http-status": { + "required": false, + "type": "-2147483648" + } + }, + "id": "(putA1Policy)output" + }, + "(getA1Policy)input": { + "$schema": "http://json-schema.org/draft-04/schema", + "type": "object", + "properties": { + "A1-ADAPTER-API:near-rt-ric-url": { + "required": false, + "type": "Some near-rt-ric-url", + "example": "http://localhost:8081/policy?id=Policy 1" + } + }, + "id": "(getA1Policy)input" + }, + "(getA1Policy)output": { + "$schema": "http://json-schema.org/draft-04/schema", + "type": "object", + "properties": { + "A1-ADAPTER-API:body": { + "required": false, + "type": "object" }, + "A1-ADAPTER-API:http-status": { + "required": false, + "type": "-2147483648" + } + }, + "id": "(getA1Policy)output" + }, + "(getA1PolicyStatus)input": { + "$schema": "http://json-schema.org/draft-04/schema", + "type": "object", + "properties": { + "A1-ADAPTER-API:near-rt-ric-url": { + "required": false, + "type": "Some near-rt-ric-url", + "example": "http://ricsim_g2_1:8085/A1-P/v1/policies/5000/status" + } + }, + "id": "(getA1PolicyStatus)input" + }, + "(getA1PolicyStatus)output": { + "$schema": "http://json-schema.org/draft-04/schema", + "type": "object", + "properties": { + "A1-ADAPTER-API:body": { + "required": false, + "type": "Some body" + }, + "A1-ADAPTER-API:http-status": { + "required": false, + "type": "-2147483648" + } + }, + "id": "(getA1PolicyStatus)output" + }, + "(getA1PolicyType)input": { + "$schema": "http://json-schema.org/draft-04/schema", + "type": "object", + "properties": { + "A1-ADAPTER-API:near-rt-ric-url": { + "required": false, + "type": "Some near-rt-ric-url", + "example": "http://nearRtRic-sim1:8085/a1-p/policytypes/11" + } + }, + "id": "(getA1PolicyType)input" + }, + "(getA1PolicyType)output": { + "$schema": "http://json-schema.org/draft-04/schema", + "type": "object", + "properties": { + "A1-ADAPTER-API:body": { + "required": false, + "type": "Some body" + }, + "A1-ADAPTER-API:http-status": { + "required": false, + "type": "-2147483648" + } + }, + "id": "(getA1PolicyType)output" + }, + "(deleteA1Policy)input": { + "$schema": "http://json-schema.org/draft-04/schema", + "type": "object", + "properties": { + "A1-ADAPTER-API:near-rt-ric-url": { + "required": false, + "type": "Some near-rt-ric-url", + "example": "http://localhost:8282/restconf/operations/A1-ADAPTER-API:deleteA1Policy" + } + }, + "id": "(deleteA1Policy)input" + }, + "(deleteA1Policy)output": { + "$schema": "http://json-schema.org/draft-04/schema", + "type": "object", + "properties": { + "A1-ADAPTER-API:body": { + "required": false, + "type": "Some body" + }, + "A1-ADAPTER-API:http-status": { + "required": false, + "type": "-2147483648" + } + }, + "id": "(deleteA1Policy)output" + } + } +}
\ No newline at end of file diff --git a/docs/offeredapis/swagger/pms-api.json b/docs/offeredapis/swagger/pms-api.json new file mode 100644 index 00000000..1837e098 --- /dev/null +++ b/docs/offeredapis/swagger/pms-api.json @@ -0,0 +1,1259 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "A1 Policy management service", + "description": "The O-RAN Non-RT RIC PolicyAgent provides a REST API for management of policices. It provides support for: -Supervision of clients (R-APPs) to eliminate stray policies in case of failure -Consistency monitoring of the SMO view of policies and the actual situation in the RICs -Consistency monitoring of RIC capabilities (policy types) -Policy configuration. This includes: -One REST API towards all RICs in the network -Query functions that can find all policies in a RIC, all policies owned by a service (R-APP), all policies of a type etc. -Maps O1 resources (ManagedElement) as defined in O1 to the controlling RIC of A1 policices.", + "version": "1.0" + }, + "servers": [ + { + "url": "https://localhost:8433/" + }, + { + "url": "http://localhost:8081/" + } + ], + "tags": [ + { + "name": "A1 Policy Management", + "description": "Policy Controller" + }, + { + "name": "Health check", + "description": "Status Controller" + }, + { + "name": "RIC Repository", + "description": "Ric Repository Controller" + }, + { + "name": "Service registry and supervision", + "description": "Service Controller" + } + ], + "paths": { + "/policies": { + "get": { + "tags": [ + "A1 Policy Management" + ], + "summary": "Query policies", + "operationId": "getPoliciesUsingGET", + "parameters": [ + { + "name": "ric", + "in": "query", + "description": "The name of the Near-RT RIC to get policies for.", + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "ric1" + }, + { + "name": "service", + "in": "query", + "description": "The name of the service to get policies for.", + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "controlpanel" + }, + { + "name": "type", + "in": "query", + "description": "The name of the policy type to get policies for.", + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "1" + } + ], + "responses": { + "200": { + "description": "Policies", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PolicyInfo" + } + }, + "examples": { + "OSC": { + "$ref": "#/components/examples/Policies-OSC" + }, + "STD": { + "$ref": "#/components/examples/Policies-STD" + } + } + } + } + }, + "404": { + "description": "RIC or type not found", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string", + "example": "RIC not found" + } + } + } + } + }, + "deprecated": false + } + }, + "/policy": { + "get": { + "tags": [ + "A1 Policy Management" + ], + "summary": "Returns a policy configuration", + "operationId": "getPolicyUsingGET", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "The identity of the policy instance.", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "e26d76e1-b43f-427e-a3c2-b7c4e05a6431" + } + ], + "responses": { + "200": { + "description": "Policy found", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "object" + }, + "examples": { + "OSC": { + "$ref": "#/components/examples/Policy-OSC" + }, + "STD": { + "$ref": "#/components/examples/Policy-STD" + } + } + } + } + }, + "404": { + "description": "Policy is not found", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string", + "example": "Could not find policy: e26d76e1-b43f-427e-a3c2-b7c4e05a6431" + } + } + } + } + }, + "deprecated": false + }, + "put": { + "tags": [ + "A1 Policy Management" + ], + "summary": "Put a policy", + "operationId": "putPolicyUsingPUT", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "The identity of the policy instance.", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "73428e58-1670-4972-8498-e7e8f1003631" + }, + { + "name": "ric", + "in": "query", + "description": "The name of the Near-RT RIC where the policy will be created.", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "ric1" + }, + { + "name": "service", + "in": "query", + "description": "The name of the service creating the policy.", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "Service1" + }, + { + "name": "transient", + "in": "query", + "description": "If the policy is transient or not (boolean defaulted to false). A policy is transient if it will be forgotten when the service needs to reconnect to the Near-RT RIC.", + "allowEmptyValue": false, + "schema": { + "type": "boolean", + "default": false + }, + "example": false + }, + { + "name": "type", + "in": "query", + "description": "The name of the policy type. The policy type is mandatory for OSC A1 version and should not be provided for STD A1 version.", + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "STD_PolicyModelUnconstrained_0.2.0" + } + ], + "requestBody": { + "description": "jsonBody", + "content": { + "application/json": { + "schema": { + "type": "object", + "example": { + "scope": { + "qosId": "3", + "ueId": "1" + }, + "statement": { + "priorityLevel": 1 + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Policy updated" + }, + "201": { + "description": "Policy created" + }, + "404": { + "description": "RIC or policy type is not found" + }, + "423": { + "description": "RIC is not operational", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string", + "example": "Ric is not operational, RIC name:ric1, state:UNAVAILABLE" + } + } + } + } + } + }, + "delete": { + "tags": [ + "A1 Policy Management" + ], + "summary": "Delete a policy", + "operationId": "deletePolicyUsingDELETE", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "The identity of the policy instance.", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "73428e58-1670-4972-8498-e7e8f1003631" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "204": { + "description": "Policy deleted" + }, + "404": { + "description": "Policy is not found" + }, + "423": { + "description": "RIC is not operational", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string", + "example": "Ric is not operational, RIC name:ric1,state:UNAVAILABLE" + } + } + } + } + }, + "deprecated": false + } + }, + "/policy_ids": { + "get": { + "tags": [ + "A1 Policy Management" + ], + "summary": "Query policies, only IDs returned", + "operationId": "getPolicyIdsUsingGET", + "parameters": [ + { + "name": "ric", + "in": "query", + "description": "The name of the Near-RT RIC to get policies for.", + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "ric1" + }, + { + "name": "service", + "in": "query", + "description": "The name of the service to get policies for.", + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "Service1" + }, + { + "name": "type", + "in": "query", + "description": "The name of the policy type to get policies for.", + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "1" + } + ], + "responses": { + "200": { + "description": "Policy ids", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "examples": { + "OSC": { + "value": [ + "73428e58-1670-4972-8498-e7e8f1003631", + "73428e58-1670-4972-8498-e7e8f100363e" + ] + }, + "STD": { + "value": [ + "73428e58-1670-4972-8498-e7e8f1003632", + "73428e58-1670-4972-8498-e7e8f1003634" + ] + } + } + } + } + }, + "404": { + "description": "RIC or type not found", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string", + "example": "RIC not found" + } + } + } + } + }, + "deprecated": false + } + }, + "/policy_schema": { + "get": { + "tags": [ + "A1 Policy Management" + ], + "summary": "Returns one policy type schema definition. Applicable only for OSC Version.", + "operationId": "getPolicySchemaUsingGET", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "The identity of the policy type to get the definition for.", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "11" + } + ], + "responses": { + "200": { + "description": "Policy schema", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "object" + }, + "examples": { + "OSC": { + "value": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "QoS policy type", + "title": "1", + "type": "object", + "properties": { + "scope": { + "additionalProperties": false, + "type": "object", + "properties": { + "qosId": { + "type": "string" + }, + "ueId": { + "type": "string" + } + }, + "required": [ + "ueId", + "qosId" + ] + }, + "statement": { + "additionalProperties": false, + "type": "object", + "properties": { + "priorityLevel": { + "type": "number" + } + }, + "required": [ + "priorityLevel" + ] + } + } + } + } + } + } + } + }, + "404": { + "description": "Type not found", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string", + "example": "org.oransc.policyagent.exceptions.ServiceException: Could not find type: 11" + } + } + } + } + }, + "deprecated": false + } + }, + "/policy_schemas": { + "get": { + "tags": [ + "A1 Policy Management" + ], + "summary": "Returns policy type schema definitions", + "operationId": "getPolicySchemasUsingGET", + "parameters": [ + { + "name": "ric", + "in": "query", + "description": "The name of the Near-RT RIC to get the definitions for.", + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "ric1" + } + ], + "responses": { + "200": { + "description": "Policy schemas", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": {} + } + }, + "examples": { + "OSC": { + "value": [ + { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "QoS policy type", + "title": "1", + "type": "object", + "properties": { + "scope": { + "additionalProperties": false, + "type": "object", + "properties": { + "qosId": { + "type": "string" + }, + "ueId": { + "type": "string" + } + }, + "required": [ + "ueId", + "qosId" + ] + }, + "statement": { + "additionalProperties": false, + "type": "object", + "properties": { + "priorityLevel": { + "type": "number" + } + }, + "required": [ + "priorityLevel" + ] + } + } + } + ] + } + } + } + } + }, + "404": { + "description": "RIC is not found", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string", + "example": "org.oransc.policyagent.exceptions.ServiceException: Could not find ric: ric1" + } + } + } + } + }, + "deprecated": false + } + }, + "/policy_status": { + "get": { + "tags": [ + "A1 Policy Management" + ], + "summary": "Returns a policy status", + "operationId": "getPolicyStatusUsingGET", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "The identity of the policy.", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "73428e58-1670-4972-8498-e7e8f100363q" + } + ], + "responses": { + "200": { + "description": "Policy status", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "object" + }, + "examples": { + "OSC": { + "value": { + "instance_status": "NOT IN EFFECT", + "has_been_deleted": "false", + "created_at": "07/20/2020, 17:15:39" + } + }, + "STD": { + "value": { + "enforceStatus": "UNDEFINED" + } + } + } + } + } + }, + "404": { + "description": "Policy is not found", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string", + "example": "Could not find policy: 73428e58-1670-4972-8498-e7e8f100363q" + } + } + } + } + }, + "deprecated": false + } + }, + "/policy_types": { + "get": { + "tags": [ + "A1 Policy Management" + ], + "summary": "Query policy type names", + "operationId": "getPolicyTypesUsingGET", + "parameters": [ + { + "name": "ric", + "in": "query", + "description": "The name of the Near-RT RIC to get types for.", + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "ric11" + } + ], + "responses": { + "200": { + "description": "Policy type names", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "examples": { + "OSC": { + "value": [ + "1" + ] + } + } + } + } + }, + "404": { + "description": "RIC is not found", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string", + "example": "org.oransc.policyagent.exceptions.ServiceException: Could not find ric: ric11" + } + } + } + } + }, + "deprecated": false + } + }, + "/ric": { + "get": { + "tags": [ + "RIC Repository" + ], + "summary": "Returns the name of a RIC managing one Mananged Element", + "operationId": "getRicUsingGET", + "parameters": [ + { + "name": "managedElementId", + "in": "query", + "description": "The identity of the Managed Element", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "Node 1" + } + ], + "responses": { + "200": { + "description": "RIC is found", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string", + "example": "ric1" + } + } + } + }, + "404": { + "description": "RIC is not found", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string", + "example": "No RIC found" + } + } + } + } + }, + "deprecated": false + } + }, + "/rics": { + "get": { + "tags": [ + "RIC Repository" + ], + "summary": "Query Near-RT RIC information", + "operationId": "getRicsUsingGET", + "parameters": [ + { + "name": "policyType", + "in": "query", + "description": "The name of the policy type", + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "STD_PolicyModelUnconstrained_0.2.0" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RicInfo" + } + } + } + } + }, + "404": { + "description": "Policy type is not found", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string", + "example": "Policy type not found" + } + } + } + } + }, + "deprecated": false + } + }, + "/service": { + "put": { + "tags": [ + "Service registry and supervision" + ], + "summary": "Register a service", + "operationId": "putServiceUsingPUT", + "requestBody": { + "description": "registrationInfo", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceRegistrationInfo" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Service updated", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string" + }, + "example": "OK" + } + } + }, + "201": { + "description": "Service created", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string", + "example": "OK" + } + } + } + }, + "400": { + "description": "The ServiceRegistrationInfo is not accepted", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string", + "example": "Missing mandatory parameter 'serviceName'" + } + } + } + }, + "404": { + "description": "Not Found" + } + }, + "deprecated": false, + "x-codegen-request-body-name": "registrationInfo" + } + }, + "/services": { + "get": { + "tags": [ + "Service registry and supervision" + ], + "summary": "Returns service information", + "operationId": "getServicesUsingGET", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "The name of the service", + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "service1" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "array", + "example": [ + { + "serviceName": "service1", + "keepAliveIntervalSeconds": 1000, + "timeSinceLastActivitySeconds": 7, + "callbackUrl": "http://localhost:8080" + } + ], + "items": { + "$ref": "#/components/schemas/ServiceStatus" + } + } + } + } + }, + "404": { + "description": "Service is not found", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string", + "example": "Service not found" + } + } + } + } + }, + "deprecated": false + }, + "delete": { + "tags": [ + "Service registry and supervision" + ], + "summary": "Delete a service", + "operationId": "deleteServiceUsingDELETE", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "The name of the service", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "service1" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "204": { + "description": "OK" + }, + "404": { + "description": "Service not found", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string", + "example": "Could not find service: service1" + } + } + } + } + }, + "deprecated": false + } + }, + "/services/keepalive": { + "put": { + "tags": [ + "Service registry and supervision" + ], + "summary": "Heartbeat from a serice", + "operationId": "keepAliveServiceUsingPUT", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "The name of the service", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "example": "service1" + } + ], + "responses": { + "200": { + "description": "Service supervision timer refreshed, OK", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string", + "example": "OK" + } + } + } + }, + "201": { + "description": "Created" + }, + "404": { + "description": "The service is not found, needs re-registration", + "content": { + "text/plain;charset=ISO-8859-1": { + "schema": { + "type": "string", + "example": "Could not find service: service1" + } + } + } + } + }, + "deprecated": false + } + }, + "/status": { + "get": { + "tags": [ + "Health check" + ], + "summary": "Returns status and statistics of this service", + "operationId": "getStatusUsingGET", + "responses": { + "200": { + "description": "Service is living", + "content": { + "*/*": { + "schema": { + "type": "string", + "example": "alive" + } + } + } + }, + "404": { + "description": "Not Found" + } + }, + "deprecated": false + } + } + }, + "components": { + "schemas": { + "PolicyInfo": { + "title": "PolicyInfo", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "identity of the policy" + }, + "json": { + "type": "object", + "properties": {}, + "description": "the configuration of the policy" + }, + "lastModified": { + "type": "string", + "description": "timestamp, last modification time" + }, + "ric": { + "type": "string", + "description": "identity of the target Near-RT RIC" + }, + "service": { + "type": "string", + "description": "the name of the service owning the policy" + }, + "type": { + "type": "string", + "description": "name of the policy type" + } + } + }, + "RicInfo": { + "title": "RicInfo", + "type": "object", + "properties": { + "managedElementIds": { + "type": "array", + "description": "O1 identities for managed entities", + "items": { + "type": "string" + } + }, + "policyTypes": { + "type": "array", + "description": "supported policy types", + "items": { + "type": "string" + } + }, + "ricName": { + "type": "string", + "description": "identity of the ric" + }, + "state": { + "type": "string", + "description": "state info" + } + }, + "example": [ + { + "ricName": "ric1", + "managedElementIds": [ + "ME-1", + "ME-2" + ], + "policyTypes": [ + "1" + ], + "state": "AVAILABLE" + }, + { + "ricName": "ric3", + "managedElementIds": [ + "ME-1", + "ME-2" + ], + "policyTypes": [ + "" + ], + "state": "AVAILABLE" + }, + { + "ricName": "ric2", + "managedElementIds": [ + "ME-1", + "ME-2" + ], + "policyTypes": [], + "state": "AVAILABLE" + }, + { + "ricName": "ric4", + "managedElementIds": [ + "ME-1", + "ME-2" + ], + "policyTypes": [ + "" + ], + "state": "AVAILABLE" + } + ] + }, + "ServiceRegistrationInfo": { + "title": "ServiceRegistrationInfo", + "required": [ + "serviceName" + ], + "type": "object", + "properties": { + "callbackUrl": { + "type": "string", + "description": "callback for notifying of RIC synchronization" + }, + "keepAliveIntervalSeconds": { + "type": "integer", + "description": "keep alive interval for the service. This is a heartbeat supervision of the service, which in regular intevals must invoke a 'keepAlive' REST call. When a service does not invoke this call within the given time, it is considered unavailble. An unavailable service will be automatically deregistered and its policies will be deleted. Value 0 means no timeout supervision.", + "format": "int64" + }, + "serviceName": { + "type": "string", + "description": "identity of the service" + } + }, + "example": { + "callbackUrl": "http://localhost:9080", + "keepAliveIntervalSeconds": 1000, + "serviceName": "service1" + } + }, + "ServiceStatus": { + "title": "ServiceStatus", + "type": "object", + "properties": { + "callbackUrl": { + "type": "string", + "description": "callback for notifying of RIC synchronization" + }, + "keepAliveIntervalSeconds": { + "type": "integer", + "description": "policy keep alive timeout", + "format": "int64" + }, + "serviceName": { + "type": "string", + "description": "identity of the service" + }, + "timeSinceLastActivitySeconds": { + "type": "integer", + "description": "time since last invocation by the service", + "format": "int64" + } + } + } + }, + "examples": { + "Policies-STD": { + "value": [ + { + "id": "a986eb38-aac3-4897-bdf5-0333ea2bf730", + "type": "", + "ric": "ric3", + "json": { + "scope": { + "ueId": "ue1", + "groupId": "group1", + "sliceId": "slice1", + "qosId": "qos1", + "cellId": "cell1" + }, + "statement": { + "priorityLevel": 5 + } + }, + "service": "controlpanel", + "lastModified": "2020-07-22T12:21:48.157854Z" + } + ] + }, + "Policies-OSC": { + "value": [ + { + "id": "73428e58-1670-4972-8498-e7e8f1003631", + "type": "1", + "ric": "ric1", + "json": { + "scope": { + "qosId": "36", + "ueId": "1" + }, + "statement": { + "priorityLevel": 1 + } + }, + "service": "c", + "lastModified": "2020-07-20T17:16:18.244383Z" + }, + { + "id": "73428e58-1670-4972-8498-e7e8f100363e", + "type": "1", + "ric": "ric1", + "json": { + "scope": { + "qosId": "34", + "ueId": "1" + }, + "statement": { + "priorityLevel": 1 + } + }, + "service": "controlpanel", + "lastModified": "2020-07-20T17:15:39.320469Z" + } + ] + }, + "Policy-STD": { + "value": { + "scope": { + "ueId": "ue1", + "groupId": "group1", + "sliceId": "slice1", + "qosId": "qos1", + "cellId": "cell1" + }, + "statement": { + "priorityLevel": 5 + } + } + }, + "Policy-OSC": { + "value": { + "scope": { + "qosId": "36", + "ueId": "1" + }, + "statement": { + "priorityLevel": 1 + } + } + } + } + } +}
\ No newline at end of file diff --git a/docs/releasenotes/release-notes.rst b/docs/releasenotes/release-notes.rst new file mode 100644 index 00000000..c46e7ad6 --- /dev/null +++ b/docs/releasenotes/release-notes.rst @@ -0,0 +1,66 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 +.. Copyright (C) 2020 Nordix Foundation. + +============= +Release-Notes +============= + + +This document provides the release notes for the release of the different parts of the ORAN project. + +.. contents:: + :depth: 3 + :local: + + +Version history Policy Management Service +========================================= + ++------------+----------+------------+----------------+ +| **Date** | **Ver.** | **Author** | **Comment** | +| | | | | ++------------+----------+------------+----------------+ +| 2020-09-10 | 1.0.0 | Dan Timony | First version | +| | | | Guilin Release | ++------------+----------+------------+----------------+ + + +Summary +------- +First version. + + +Version history A1 Adapter +========================== + ++------------+----------+------------+----------------+ +| **Date** | **Ver.** | **Author** | **Comment** | +| | | | | ++------------+----------+------------+----------------+ +| 2019-09-10 | 1.0.0 | Dan Timony | First version | +| | | | Guilin Release | ++------------+----------+------------+----------------+ + + +Release Data +============ + +Guilin +------ ++-----------------------------+-----------------------------------------------------+ +| **Project** | CCSDK ORAN | +| | | ++-----------------------------+-----------------------------------------------------+ +| **Repo/commit-ID** | ccsdk-oran/ec3829493c0b71c5e5908a430edd1e493504178e | +| | | ++-----------------------------+-----------------------------------------------------+ +| **Release designation** | Guilin | +| | | ++-----------------------------+-----------------------------------------------------+ +| **Release date** | 2020-09-10 | +| | | ++-----------------------------+-----------------------------------------------------+ +| **Purpose of the delivery** | Introducing ORAN | +| | | ++-----------------------------+-----------------------------------------------------+ diff --git a/docs/requirements-docs.txt b/docs/requirements-docs.txt new file mode 100644 index 00000000..aeda4ee2 --- /dev/null +++ b/docs/requirements-docs.txt @@ -0,0 +1,17 @@ +tox +Sphinx>=2,<4 +doc8 +docutils +setuptools +six +sphinx-tabs +sphinx_rtd_theme>=0.4.3 +sphinxcontrib-blockdiag +sphinxcontrib-needs>=0.2.3 +sphinxcontrib-nwdiag +sphinxcontrib-seqdiag +sphinxcontrib-swaggerdoc +sphinxcontrib-plantuml +sphinx_bootstrap_theme +sphinxcontrib-redoc +lfdocs-conf
\ No newline at end of file diff --git a/docs/tox.ini b/docs/tox.ini new file mode 100644 index 00000000..edac8c35 --- /dev/null +++ b/docs/tox.ini @@ -0,0 +1,22 @@ +[tox] +minversion = 1.6 +envlist = docs, +skipsdist = true + +[testenv:docs] +basepython = python3 +deps = -r{toxinidir}/requirements-docs.txt +commands = + sphinx-build -b html -n -d {envtmpdir}/doctrees ./ {toxinidir}/_build/html + echo "Generated docs available in {toxinidir}/_build/html" +whitelist_externals = + echo + git + sh + +[testenv:docs-linkcheck] +basepython = python3 +#deps = -r{toxinidir}/requirements-docs.txt +commands = echo "Link Checking not enforced" +#commands = sphinx-build -b linkcheck -d {envtmpdir}/doctrees ./ {toxinidir}/_build/linkcheck +whitelist_externals = echo |