aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--a1-policy-management/README.md2
-rw-r--r--a1-policy-management/api/pms-api.json12
-rw-r--r--a1-policy-management/api/pms-api.yaml30
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/SwaggerConfig.java10
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1Client.java8
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientFactory.java24
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/StdA1ClientVersion2.java7
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigParser.java20
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/RicConfig.java2
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/PolicyTypeInfo.java2
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java4
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ServiceController.java2
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ServiceRegistrationInfo.java8
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/Ric.java10
-rw-r--r--a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientFactoryTest.java42
-rw-r--r--a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientHelper.java1
-rw-r--r--a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/OscA1ClientTest.java1
-rw-r--r--a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/StdA1ClientV2Test.java1
-rw-r--r--a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigTest.java4
-rw-r--r--a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ApplicationTest.java1
-rw-r--r--a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RappSimulatorController.java2
-rw-r--r--a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshConfigTaskTest.java1
-rw-r--r--a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RicSupervisionTest.java1
-rw-r--r--a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RicSynchronizationTaskTest.java1
-rw-r--r--a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/ServiceSupervisionTest.java1
-rw-r--r--a1-policy-management/src/test/resources/test_application_configuration.json3
-rw-r--r--a1-policy-management/src/test/resources/test_application_configuration_with_dmaap_config.json5
-rwxr-xr-xdocs/architecture/architecture.rst8
-rwxr-xr-xdocs/consumedapis/consumedapis.rst13
-rw-r--r--docs/guide/developer-guide.rst75
-rw-r--r--docs/humaninterfaces/humaninterfaces.rst4
-rw-r--r--docs/index.rst2
-rw-r--r--docs/media/ONAP-A1ControllerArchitecture.pngbin79142 -> 75211 bytes
-rw-r--r--docs/offeredapis/offeredapis.rst4
-rw-r--r--docs/offeredapis/swagger/a1-adapter-api.yaml2
-rw-r--r--docs/offeredapis/swagger/pms-api.json12
-rw-r--r--docs/offeredapis/swagger/pms-api.yaml30
-rw-r--r--docs/releasenotes/release-notes.rst136
38 files changed, 372 insertions, 119 deletions
diff --git a/a1-policy-management/README.md b/a1-policy-management/README.md
index 5c619c23..c25b29d8 100644
--- a/a1-policy-management/README.md
+++ b/a1-policy-management/README.md
@@ -75,7 +75,7 @@ Sample Response Message to DMaaP:
## License
ONAP : ccsdk oran
-Copyright (C) 2019-2020 Nordix Foundation. All rights reserved.
+Copyright (C) 2019-2022 Nordix Foundation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/a1-policy-management/api/pms-api.json b/a1-policy-management/api/pms-api.json
index 2b8fb739..9fc8e7bb 100644
--- a/a1-policy-management/api/pms-api.json
+++ b/a1-policy-management/api/pms-api.json
@@ -79,7 +79,7 @@
},
"keep_alive_interval_seconds": {
"format": "int64",
- "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.",
+ "description": "keep alive interval for the service. This is a heartbeat supervision of the service, which in regular intervals must invoke a 'keepalive' REST call. When a service does not invoke this call within the given time, it is considered unavailable. An unavailable service will be automatically deregistered and its policies will be deleted. Value 0 means no timeout supervision.",
"type": "integer"
}
}
@@ -144,7 +144,7 @@
"description": "Policy type",
"type": "object",
"properties": {"policy_schema": {
- "description": "Policy type json scema. The schema is a json object following http://json-schema.org/draft-07/schema",
+ "description": "Policy type json schema. The schema is a json object following http://json-schema.org/draft-07/schema",
"type": "object"
}}
},
@@ -335,7 +335,7 @@
}},
"/a1-policy/v2/rics/ric": {"get": {
"summary": "Returns info for one Near-RT RIC",
- "description": "Either a Near-RT RIC identity or a Mananged Element identity can be specified.<br>The intention with Mananged Element identity is the ID used in O1 for accessing the traffical element (such as the ID of CU).",
+ "description": "Either a Near-RT RIC identity or a Managed Element identity can be specified.<br>The intention with Managed Element identity is the ID used in O1 for accessing the traffical element (such as the ID of CU).",
"operationId": "getRic",
"responses": {
"200": {
@@ -559,7 +559,7 @@
},
"/a1-policy/v2/services/{service_id}/keepalive": {"put": {
"summary": "Heartbeat indicates that the service is running",
- "description": "A registerred service must call this in regular intervals to indicate that it is in operation. Absence of this call will lead to that the service will be deregisterred and all its policies are removed.",
+ "description": "A registered service must call this in regular intervals to indicate that it is in operation. Absence of this call will lead to that the service will be deregistered and all its policies are removed.",
"operationId": "keepAliveService",
"responses": {
"200": {
@@ -798,7 +798,7 @@
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/service_callback_info_v2"}}},
"required": true
},
- "description": "The URL to this call is registerred at Service registration.",
+ "description": "The URL to this call is registered at Service registration.",
"operationId": "serviceCallback",
"responses": {"200": {
"description": "OK",
@@ -867,7 +867,7 @@
"name": "Copyright (C) 2020-2022 Nordix Foundation. Licensed under the Apache License.",
"url": "http://www.apache.org/licenses/LICENSE-2.0"
},
- "description": "<h2>General<\/h2><p>The O-RAN Non-RT RIC Policy Management Service provides a REST API for management of A1 policices. <br/>The main tasks of the service are:<\/p><ul><li>A1 Policy creation, modification and deletion.<\/li><li>Monitoring and maintaining consistency of the SMO view of A1 policies and the Near-RT RICs<\/li><li>Maintaining a view of supported Near-RT RIC policy types<\/li><li>Supervision of using services (R-APPs). When a service is unavailble, its policies are removed.<\/li><\/ul><h2>APIs provided by the service<\/h2><h3>A1 Policy Management<\/h3><p>This is an API for management of A1 Policies.<\/p><ul><li>A1 Policy retrieval, creation, modification and deletion.<\/li><li>Retrieval of supported A1 Policy types for a Near-RT RIC<\/li><li>Retrieval of status for existing A1 policies<\/li><\/ul><h3>Management of configuration<\/h3><p>API for updating and retrieval of the component configuration. Note that there other ways to maintain the configuration.<\/p><h3>Callbacks<\/h3><p>These are endpoints that are invoked by this service. The callbacks are registerred in this service at service registration.<\/p><h3>NearRT-RIC Repository<\/h3><p>This is an API that provides support for looking up a NearRT-RIC. Each A1 policy is targeted for one Near-RT RIC.<\/p><h3>Health Check<\/h3><p>API used for supervision of the PMS component.<\/p><h3>Service Registry and Supervision<\/h3><p>API used for registerring services that uses PMS. Each A1 policy is owned by a service. PMS can supervise each registerred service and will automatically remove policies for unavailable services.<\/p>",
+ "description": "<h2>General<\/h2><p>The O-RAN Non-RT RIC Policy Management Service provides a REST API for management of A1 policies. <br/>The main tasks of the service are:<\/p><ul><li>A1 Policy creation, modification and deletion.<\/li><li>Monitoring and maintaining consistency of the SMO view of A1 policies and the Near-RT RICs<\/li><li>Maintaining a view of supported Near-RT RIC policy types<\/li><li>Supervision of using services (R-APPs). When a service is unavailable, its policies are removed.<\/li><\/ul><h2>APIs provided by the service<\/h2><h3>A1 Policy Management<\/h3><p>This is an API for management of A1 Policies.<\/p><ul><li>A1 Policy retrieval, creation, modification and deletion.<\/li><li>Retrieval of supported A1 Policy types for a Near-RT RIC<\/li><li>Retrieval of status for existing A1 policies<\/li><\/ul><h3>Management of configuration<\/h3><p>API for updating and retrieval of the component configuration. Note that there other ways to maintain the configuration.<\/p><h3>Callbacks<\/h3><p>These are endpoints that are invoked by this service. The callbacks are registered in this service at service registration.<\/p><h3>NearRT-RIC Repository<\/h3><p>This is an API that provides support for looking up a NearRT-RIC. Each A1 policy is targeted for one Near-RT RIC.<\/p><h3>Health Check<\/h3><p>API used for supervision of the PMS component.<\/p><h3>Service Registry and Supervision<\/h3><p>API used for registering services that uses PMS. Each A1 policy is owned by a service. PMS can supervise each registered service and will automatically remove policies for unavailable services.<\/p>",
"title": "A1 Policy management service",
"version": "1.1.0"
},
diff --git a/a1-policy-management/api/pms-api.yaml b/a1-policy-management/api/pms-api.yaml
index 958ec0d4..3fd496bd 100644
--- a/a1-policy-management/api/pms-api.yaml
+++ b/a1-policy-management/api/pms-api.yaml
@@ -2,23 +2,23 @@ openapi: 3.0.1
info:
title: A1 Policy management service
description: <h2>General</h2><p>The O-RAN Non-RT RIC Policy Management Service provides
- a REST API for management of A1 policices. <br/>The main tasks of the service
- are:</p><ul><li>A1 Policy creation, modification and deletion.</li><li>Monitoring
- and maintaining consistency of the SMO view of A1 policies and the Near-RT RICs</li><li>Maintaining
+ a REST API for management of A1 policies. <br/>The main tasks of the service are:</p><ul><li>A1
+ Policy creation, modification and deletion.</li><li>Monitoring and maintaining
+ consistency of the SMO view of A1 policies and the Near-RT RICs</li><li>Maintaining
a view of supported Near-RT RIC policy types</li><li>Supervision of using services
- (R-APPs). When a service is unavailble, its policies are removed.</li></ul><h2>APIs
+ (R-APPs). When a service is unavailable, its policies are removed.</li></ul><h2>APIs
provided by the service</h2><h3>A1 Policy Management</h3><p>This is an API for
management of A1 Policies.</p><ul><li>A1 Policy retrieval, creation, modification
and deletion.</li><li>Retrieval of supported A1 Policy types for a Near-RT RIC</li><li>Retrieval
of status for existing A1 policies</li></ul><h3>Management of configuration</h3><p>API
for updating and retrieval of the component configuration. Note that there other
ways to maintain the configuration.</p><h3>Callbacks</h3><p>These are endpoints
- that are invoked by this service. The callbacks are registerred in this service
+ that are invoked by this service. The callbacks are registered in this service
at service registration.</p><h3>NearRT-RIC Repository</h3><p>This is an API that
provides support for looking up a NearRT-RIC. Each A1 policy is targeted for one
Near-RT RIC.</p><h3>Health Check</h3><p>API used for supervision of the PMS component.</p><h3>Service
- Registry and Supervision</h3><p>API used for registerring services that uses PMS.
- Each A1 policy is owned by a service. PMS can supervise each registerred service
+ Registry and Supervision</h3><p>API used for registering services that uses PMS.
+ Each A1 policy is owned by a service. PMS can supervise each registered service
and will automatically remove policies for unavailable services.</p>
license:
name: Copyright (C) 2020-2022 Nordix Foundation. Licensed under the Apache License.
@@ -152,8 +152,8 @@ paths:
tags:
- NearRT-RIC Repository
summary: Returns info for one Near-RT RIC
- description: Either a Near-RT RIC identity or a Mananged Element identity can
- be specified.<br>The intention with Mananged Element identity is the ID used
+ description: Either a Near-RT RIC identity or a Managed Element identity can
+ be specified.<br>The intention with Managed Element identity is the ID used
in O1 for accessing the traffical element (such as the ID of CU).
operationId: getRic
parameters:
@@ -434,9 +434,9 @@ paths:
tags:
- Service Registry and Supervision
summary: Heartbeat indicates that the service is running
- description: A registerred service must call this in regular intervals to indicate
+ description: A registered service must call this in regular intervals to indicate
that it is in operation. Absence of this call will lead to that the service
- will be deregisterred and all its policies are removed.
+ will be deregistered and all its policies are removed.
operationId: keepAliveService
parameters:
- name: service_id
@@ -742,7 +742,7 @@ paths:
tags:
- Callbacks
summary: Callback for Near-RT RIC status
- description: The URL to this call is registerred at Service registration.
+ description: The URL to this call is registered at Service registration.
operationId: serviceCallback
requestBody:
content:
@@ -897,9 +897,9 @@ components:
keep_alive_interval_seconds:
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
+ of the service, which in regular intervals 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
+ it is considered unavailable. An unavailable service will be automatically
deregistered and its policies will be deleted. Value 0 means no timeout
supervision.
format: int64
@@ -955,7 +955,7 @@ components:
properties:
policy_schema:
type: object
- description: Policy type json scema. The schema is a json object following
+ description: Policy type json schema. The schema is a json object following
http://json-schema.org/draft-07/schema
description: Policy type
policytype_id_list_v2:
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/SwaggerConfig.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/SwaggerConfig.java
index b262af07..774b2363 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/SwaggerConfig.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/SwaggerConfig.java
@@ -52,15 +52,15 @@ public class SwaggerConfig {
private static final String H3 = "<h3>";
private static final String H3_END = "</h3>";
- public static final String API_TITLE = "A1 Policy management service";
+ public static final String API_TITLE = "A1 Policy Management Service";
static final String DESCRIPTION = "<h2>General</h2>" + //
- "<p>The O-RAN Non-RT RIC Policy Management Service provides a REST API for management of A1 policices. <br/>The main tasks of the service are:</p>"
+ "<p>The O-RAN Non-RT RIC Policy Management Service provides a REST API for management of A1 policies. <br/>The main tasks of the service are:</p>"
+ //
"<ul>" + //
"<li>A1 Policy creation, modification and deletion.</li>" + //
"<li>Monitoring and maintaining consistency of the SMO view of A1 policies and the Near-RT RICs</li>" + //
"<li>Maintaining a view of supported Near-RT RIC policy types</li>" + //
- "<li>Supervision of using services (R-APPs). When a service is unavailble, its policies are removed.</li>" + //
+ "<li>Supervision of using services (R-APPs). When a service is unavailable, its policies are removed.</li>" + //
"</ul>" + //
"<h2>APIs provided by the service</h2>" + //
H3 + PolicyController.API_NAME + H3_END + //
@@ -75,14 +75,14 @@ public class SwaggerConfig {
"<p>API for updating and retrieval of the component configuration. Note that there other ways to maintain the configuration.</p>"
+ //
H3 + Consts.V2_API_SERVICE_CALLBACKS_NAME + H3_END + //
- "<p>These are endpoints that are invoked by this service. The callbacks are registerred in this service at service registration.</p>"
+ "<p>These are endpoints that are invoked by this service. The callbacks are registered in this service at service registration.</p>"
+ //
H3 + RicRepositoryController.API_NAME + H3_END + //
"<p>This is an API that provides support for looking up a NearRT-RIC. Each A1 policy is targeted for one Near-RT RIC.</p>"
+ H3 + StatusController.API_NAME + H3_END + //
"<p>API used for supervision of the PMS component.</p>" + //
H3 + ServiceController.API_NAME + H3_END + //
- "<p>API used for registerring services that uses PMS. Each A1 policy is owned by a service. PMS can supervise each registerred service and will automatically remove policies for unavailable services.</p>";
+ "<p>API used for registering services that uses PMS. Each A1 policy is owned by a service. PMS can supervise each registered service and will automatically remove policies for unavailable services.</p>";
public static final String VERSION = "1.1.0";
}
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1Client.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1Client.java
index 5e498e4b..a691ee1e 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1Client.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1Client.java
@@ -22,6 +22,7 @@ package org.onap.ccsdk.oran.a1policymanagementservice.clients;
import java.util.List;
+import org.onap.ccsdk.oran.a1policymanagementservice.configuration.RicConfig;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.Policy;
import reactor.core.publisher.Flux;
@@ -33,6 +34,10 @@ import reactor.core.publisher.Mono;
*/
public interface A1Client {
+ public interface Factory {
+ A1Client create(RicConfig ricConfig, AsyncRestClientFactory restClientFactory);
+ }
+
public enum A1ProtocolType {
UNKNOWN, //
STD_V1_1, // STD A1 version 1.1
@@ -40,7 +45,8 @@ public interface A1Client {
OSC_V1, // OSC 'A1'
CCSDK_A1_ADAPTER_STD_V1_1, // CCSDK_A1_ADAPTER with STD A1 version 1.1 southbound
CCSDK_A1_ADAPTER_STD_V2_0_0, // CCSDK_A1_ADAPTER with STD A1 version 2.0.0 southbound
- CCSDK_A1_ADAPTER_OSC_V1 // CCSDK_A1_ADAPTER with OSC 'A1' southbound
+ CCSDK_A1_ADAPTER_OSC_V1, // CCSDK_A1_ADAPTER with OSC 'A1' southbound
+ CUSTOM_PROTOCOL // Some other protocol handled by some custom A1 adapter class.
}
public Mono<A1ProtocolType> getProtocolVersion();
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientFactory.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientFactory.java
index 1d465c3a..04dd08ee 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientFactory.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientFactory.java
@@ -20,9 +20,12 @@
package org.onap.ccsdk.oran.a1policymanagementservice.clients;
+import java.lang.reflect.Constructor;
+
import org.onap.ccsdk.oran.a1policymanagementservice.clients.A1Client.A1ProtocolType;
import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ApplicationConfig;
import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ControllerConfig;
+import org.onap.ccsdk.oran.a1policymanagementservice.configuration.RicConfig;
import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.ServiceException;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.Ric;
import org.slf4j.Logger;
@@ -83,6 +86,8 @@ public class A1ClientFactory {
|| version == A1ProtocolType.CCSDK_A1_ADAPTER_OSC_V1
|| version == A1ProtocolType.CCSDK_A1_ADAPTER_STD_V2_0_0) {
return new CcsdkA1AdapterClient(version, ric.getConfig(), getControllerConfig(ric), this.restClientFactory);
+ } else if (version == A1ProtocolType.CUSTOM_PROTOCOL) {
+ return createCustomAdapter(ric);
} else {
logger.error("Unhandled protocol: {}", version);
throw new ServiceException("Unhandled protocol");
@@ -103,6 +108,25 @@ public class A1ClientFactory {
}
}
+ private A1Client createCustomAdapter(Ric ric) throws ServiceException {
+ try {
+ Class<?> clazz = Class.forName(ric.getConfig().customAdapterClass());
+ if (A1Client.class.isAssignableFrom(clazz)) {
+ Constructor<?> constructor = clazz.getConstructor(RicConfig.class, AsyncRestClientFactory.class);
+ return (A1Client) constructor.newInstance(ric.getConfig(), this.restClientFactory);
+ } else if (A1Client.Factory.class.isAssignableFrom(clazz)) {
+ A1Client.Factory factory = (A1Client.Factory) clazz.getDeclaredConstructor().newInstance();
+ return factory.create(ric.getConfig(), this.restClientFactory);
+ } else {
+ throw new ServiceException("The custom class must either implement A1Client.Factory or A1Client");
+ }
+ } catch (ClassNotFoundException e) {
+ throw new ServiceException("Could not find class: " + ric.getConfig().customAdapterClass(), e);
+ } catch (Exception e) {
+ throw new ServiceException("Cannot create custom adapter: " + ric.getConfig().customAdapterClass(), e);
+ }
+ }
+
private void assertNoControllerConfig(Ric ric, A1ProtocolType version) throws ServiceException {
if (!ric.getConfig().controllerName().isEmpty()) {
ric.setProtocolVersion(A1ProtocolType.UNKNOWN);
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/StdA1ClientVersion2.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/StdA1ClientVersion2.java
index d0f4da28..b91edee3 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/StdA1ClientVersion2.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/StdA1ClientVersion2.java
@@ -41,6 +41,13 @@ import reactor.core.publisher.Mono;
public class StdA1ClientVersion2 implements A1Client {
static final int CONCURRENCY_RIC = 1; // How many paralell requests that is sent to one NearRT RIC
+ public static class Factory implements A1Client.Factory {
+ @Override
+ public A1Client create(RicConfig ricConfig, AsyncRestClientFactory restClientFactory) {
+ return new StdA1ClientVersion2(ricConfig, restClientFactory);
+ }
+ }
+
public static class OranV2UriBuilder implements A1UriBuilder {
private final RicConfig ricConfig;
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigParser.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigParser.java
index 726d67fc..fc1985ac 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigParser.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigParser.java
@@ -163,13 +163,13 @@ public class ApplicationConfigParser {
private List<RicConfig> parseRics(JsonObject config) throws ServiceException {
List<RicConfig> result = new ArrayList<>();
for (JsonElement ricElem : getAsJsonArray(config, "ric")) {
- JsonObject ricAsJson = ricElem.getAsJsonObject();
- JsonElement controllerNameElement = ricAsJson.get(CONTROLLER);
+ JsonObject ricJsonObj = ricElem.getAsJsonObject();
RicConfig ricConfig = ImmutableRicConfig.builder() //
- .ricId(get(ricAsJson, "name", "id", "ricId").getAsString()) //
- .baseUrl(get(ricAsJson, "baseUrl").getAsString()) //
- .managedElementIds(parseManagedElementIds(get(ricAsJson, "managedElementIds").getAsJsonArray())) //
- .controllerName(controllerNameElement != null ? controllerNameElement.getAsString() : "") //
+ .ricId(get(ricJsonObj, "name", "id", "ricId").getAsString()) //
+ .baseUrl(get(ricJsonObj, "baseUrl").getAsString()) //
+ .managedElementIds(parseManagedElementIds(get(ricJsonObj, "managedElementIds").getAsJsonArray())) //
+ .controllerName(getString(ricJsonObj, CONTROLLER, ""))
+ .customAdapterClass(getString(ricJsonObj, "customAdapterClass", "")) //
.build();
if (!ricConfig.baseUrl().isEmpty()) {
result.add(ricConfig);
@@ -180,6 +180,14 @@ public class ApplicationConfigParser {
return result;
}
+ String getString(JsonObject obj, String name, String defaultValue) {
+ JsonElement elem = obj.get(name);
+ if (elem != null) {
+ return elem.getAsString();
+ }
+ return defaultValue;
+ }
+
Map<String, ControllerConfig> parseControllerConfigs(JsonObject config) throws ServiceException {
if (config.get(CONTROLLER) == null) {
return new HashMap<>();
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/RicConfig.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/RicConfig.java
index 7f7f9f5e..251be5e7 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/RicConfig.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/RicConfig.java
@@ -34,4 +34,6 @@ public interface RicConfig {
public ImmutableList<String> managedElementIds();
+ public String customAdapterClass();
+
}
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/PolicyTypeInfo.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/PolicyTypeInfo.java
index 7449e94d..b619e44b 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/PolicyTypeInfo.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/PolicyTypeInfo.java
@@ -33,7 +33,7 @@ import org.immutables.gson.Gson;
@Schema(name = "policytype_v2", description = "Policy type")
public class PolicyTypeInfo {
- @Schema(description = "Policy type json scema. The schema is a json object following http://json-schema.org/draft-07/schema")
+ @Schema(description = "Policy type json schema. The schema is a json object following http://json-schema.org/draft-07/schema")
@SerializedName("policy_schema")
@JsonProperty("policy_schema")
public final Object schema;
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java
index def388ac..9e2644ad 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java
@@ -68,8 +68,8 @@ public class RicRepositoryController {
private static final String GET_RIC_BRIEF = "Returns info for one Near-RT RIC";
private static final String GET_RIC_DETAILS =
- "Either a Near-RT RIC identity or a Mananged Element identity can be specified.<br>" //
- + "The intention with Mananged Element identity is the ID used in O1 for accessing the traffical element (such as the ID of CU).";
+ "Either a Near-RT RIC identity or a Managed Element identity can be specified.<br>" //
+ + "The intention with Managed Element identity is the ID used in O1 for accessing the traffical element (such as the ID of CU).";
/**
* Example: http://localhost:8081/v2/rics/ric?managed_element_id=kista_1
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ServiceController.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ServiceController.java
index 7f342150..faa152ca 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ServiceController.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ServiceController.java
@@ -178,7 +178,7 @@ public class ServiceController {
}
@Operation(summary = "Heartbeat indicates that the service is running",
- description = "A registerred service must call this in regular intervals to indicate that it is in operation. Absence of this call will lead to that the service will be deregisterred and all its policies are removed.")
+ description = "A registered service should invoke this operation regularly to indicate that it is still alive. If a registered service fails to invoke this operation before the end of a timeout period the service will be deregistered and all its A1 policies wil be removed. (This timeout can be set or disabled when each service is initially registered)")
@ApiResponses(value = { //
@ApiResponse(responseCode = "200", description = "Service supervision timer refreshed, OK"), //
@ApiResponse(responseCode = "404", description = "The service is not found, needs re-registration",
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ServiceRegistrationInfo.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ServiceRegistrationInfo.java
index 16f1f163..17277c9a 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ServiceRegistrationInfo.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ServiceRegistrationInfo.java
@@ -36,11 +36,11 @@ public class ServiceRegistrationInfo {
@JsonProperty("service_id")
public String serviceId = "";
- @Schema(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. "
+ @Schema(description = "keep alive interval for the service. This is used to enable optional heartbeat supervision of the service. "
+ + "If set (> 0) the registered service should regularly invoke a 'keepalive' REST call. "
+ + "When a service fails to invoke this 'keepalive' call within the configured time, the service is considered unavailable. "
+ "An unavailable service will be automatically deregistered and its policies will be deleted. "
- + "Value 0 means no timeout supervision.")
+ + "Value 0 means timeout supervision is disabled.")
@SerializedName("keep_alive_interval_seconds")
@JsonProperty("keep_alive_interval_seconds")
public long keepAliveIntervalSeconds = 0;
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/Ric.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/Ric.java
index f43737f5..012f1f62 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/Ric.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/Ric.java
@@ -40,7 +40,7 @@ public class Ric {
private RicConfig ricConfig;
private RicState state = RicState.UNAVAILABLE;
private Map<String, PolicyType> supportedPolicyTypes = new HashMap<>();
- @Getter
+
@Setter
private A1ProtocolType protocolVersion = A1ProtocolType.UNKNOWN;
@@ -73,6 +73,14 @@ public class Ric {
this.state = state;
}
+ public synchronized A1ProtocolType getProtocolVersion() {
+ if (this.ricConfig.customAdapterClass().isEmpty()) {
+ return this.protocolVersion;
+ } else {
+ return A1ProtocolType.CUSTOM_PROTOCOL;
+ }
+ }
+
/**
* Gets the nodes managed by this Ric.
*
diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientFactoryTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientFactoryTest.java
index 645f2353..499889a6 100644
--- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientFactoryTest.java
+++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientFactoryTest.java
@@ -29,6 +29,7 @@ import static org.mockito.Mockito.when;
import java.util.Vector;
+import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -39,6 +40,7 @@ import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ApplicationCo
import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ControllerConfig;
import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ImmutableControllerConfig;
import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ImmutableRicConfig;
+import org.onap.ccsdk.oran.a1policymanagementservice.configuration.RicConfig;
import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.ServiceException;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.Ric;
@@ -68,21 +70,25 @@ class A1ClientFactoryTest {
private Ric ric;
private A1ClientFactory factoryUnderTest;
- private static ImmutableRicConfig ricConfig(String controllerName) {
+ private static ImmutableRicConfig ricConfig(String controllerName, String customAdapter) {
return ImmutableRicConfig.builder() //
.ricId(RIC_NAME) //
.baseUrl("baseUrl") //
.managedElementIds(new Vector<>()) //
.controllerName(controllerName) //
+ .customAdapterClass(customAdapter) //
.build();
}
+ private static ImmutableRicConfig ricConfig(String controllerName) {
+ return ricConfig(controllerName, "");
+ }
+
@BeforeEach
void createFactoryUnderTest() {
SecurityContext sec = new SecurityContext("");
factoryUnderTest = spy(new A1ClientFactory(applicationConfigMock, sec));
this.ric = new Ric(ricConfig(""));
-
}
@Test
@@ -109,6 +115,38 @@ class A1ClientFactoryTest {
assertEquals(A1ProtocolType.STD_V1_1, ric.getProtocolVersion(), "Not correct protocol");
}
+ public static class CustomA1AdapterFactory implements A1Client.Factory {
+ @Override
+ public A1Client create(RicConfig ricConfig, AsyncRestClientFactory restClientFactory) {
+ return new StdA1ClientVersion2(ricConfig, restClientFactory);
+ }
+ }
+
+ @Test
+ void testCustomAdapterCreation() {
+
+ Ric ric = new Ric(ricConfig("", CustomA1AdapterFactory.class.getName()));
+ A1Client client = factoryUnderTest.createA1Client(ric).block();
+
+ assertEquals(client.getClass(), StdA1ClientVersion2.class);
+
+ ric = new Ric(ricConfig("", "org.onap.ccsdk.oran.a1policymanagementservice.clients.StdA1ClientVersion2"));
+ client = factoryUnderTest.createA1Client(ric).block();
+
+ assertEquals(client.getClass(), StdA1ClientVersion2.class);
+
+ ric = new Ric(
+ ricConfig("", "org.onap.ccsdk.oran.a1policymanagementservice.clients.StdA1ClientVersion2$Factory"));
+ client = factoryUnderTest.createA1Client(ric).block();
+
+ assertEquals(client.getClass(), StdA1ClientVersion2.class);
+
+ Exception e = Assertions.assertThrows(Exception.class, () -> {
+ factoryUnderTest.createClient(new Ric(ricConfig("", "junk")), A1ProtocolType.CUSTOM_PROTOCOL);
+ });
+ assertEquals("Could not find class: junk", e.getMessage());
+ }
+
@Test
void getProtocolVersion_error() throws ServiceException {
whenGetProtocolVersionThrowException(clientMock1, clientMock2, clientMock3, clientMock4);
diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientHelper.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientHelper.java
index eb007138..3090f64a 100644
--- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientHelper.java
+++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientHelper.java
@@ -49,6 +49,7 @@ public class A1ClientHelper {
.baseUrl(url) //
.managedElementIds(new Vector<String>(Arrays.asList("kista_1", "kista_2"))) //
.controllerName("") //
+ .customAdapterClass("") //
.build();
return new Ric(cfg);
}
diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/OscA1ClientTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/OscA1ClientTest.java
index 6aacc914..13379633 100644
--- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/OscA1ClientTest.java
+++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/OscA1ClientTest.java
@@ -71,6 +71,7 @@ class OscA1ClientTest {
.baseUrl("RicBaseUrl") //
.managedElementIds(new ArrayList<>()) //
.controllerName("") //
+ .customAdapterClass("") //
.build();
asyncRestClientMock = mock(AsyncRestClient.class);
clientUnderTest = new OscA1Client(ricConfig, asyncRestClientMock);
diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/StdA1ClientV2Test.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/StdA1ClientV2Test.java
index de55882b..4b6d17b0 100644
--- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/StdA1ClientV2Test.java
+++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/StdA1ClientV2Test.java
@@ -74,6 +74,7 @@ class StdA1ClientV2Test {
.baseUrl(RIC_URL) //
.managedElementIds(new ArrayList<>()) //
.controllerName("") //
+ .customAdapterClass("") //
.build();
asyncRestClientMock = mock(AsyncRestClient.class);
clientUnderTest = new StdA1ClientVersion2(ricConfig, asyncRestClientMock);
diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigTest.java
index 7a075428..fd77eb8f 100644
--- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigTest.java
+++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigTest.java
@@ -42,6 +42,7 @@ class ApplicationConfigTest {
.baseUrl("ric1_url") //
.managedElementIds(new Vector<>()) //
.controllerName("") //
+ .customAdapterClass("") //
.build();
private static final ImmutableRicConfig RIC_CONFIG_2 = ImmutableRicConfig.builder() //
@@ -49,6 +50,7 @@ class ApplicationConfigTest {
.baseUrl("ric1_url") //
.managedElementIds(new Vector<>()) //
.controllerName("") //
+ .customAdapterClass("") //
.build();
private static final ImmutableRicConfig RIC_CONFIG_3 = ImmutableRicConfig.builder() //
@@ -56,6 +58,7 @@ class ApplicationConfigTest {
.baseUrl("ric1_url") //
.managedElementIds(new Vector<>()) //
.controllerName("") //
+ .customAdapterClass("") //
.build();
ConfigParserResult configParserResult(RicConfig... rics) {
@@ -103,6 +106,7 @@ class ApplicationConfigTest {
.baseUrl("changed_ric1_url") //
.managedElementIds(new Vector<>()) //
.controllerName("") //
+ .customAdapterClass("") //
.build();
update = appConfigUnderTest.setConfiguration(configParserResult(changedRicConfig, RIC_CONFIG_2, RIC_CONFIG_3))
diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ApplicationTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ApplicationTest.java
index 569cb577..174add3b 100644
--- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ApplicationTest.java
+++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ApplicationTest.java
@@ -1046,6 +1046,7 @@ class ApplicationTest {
.baseUrl(ricId) //
.managedElementIds(mes) //
.controllerName("") //
+ .customAdapterClass("") //
.build();
}
diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RappSimulatorController.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RappSimulatorController.java
index d9c724fc..371bd959 100644
--- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RappSimulatorController.java
+++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RappSimulatorController.java
@@ -78,7 +78,7 @@ public class RappSimulatorController {
@Getter
private TestResults testResults = new TestResults();
- private static final String CALLBACK_DESCRIPTION = "The URL to this call is registerred at Service registration.";
+ private static final String CALLBACK_DESCRIPTION = "The URL to this call is registered at Service registration.";
@PostMapping(path = SERVICE_CALLBACK_URL, produces = MediaType.APPLICATION_JSON_VALUE)
@Operation(summary = "Callback for Near-RT RIC status", description = CALLBACK_DESCRIPTION)
diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshConfigTaskTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshConfigTaskTest.java
index f09bd05d..fc565305 100644
--- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshConfigTaskTest.java
+++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshConfigTaskTest.java
@@ -82,6 +82,7 @@ class RefreshConfigTaskTest {
.baseUrl("http://localhost:8080/") //
.managedElementIds(new Vector<String>(Arrays.asList("kista_1", "kista_2"))) //
.controllerName("") //
+ .customAdapterClass("") //
.build();
private RefreshConfigTask createTestObject(boolean configFileExists) {
diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RicSupervisionTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RicSupervisionTest.java
index b76131df..320d1fb0 100644
--- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RicSupervisionTest.java
+++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RicSupervisionTest.java
@@ -70,6 +70,7 @@ class RicSupervisionTest {
.baseUrl("baseUrl1") //
.managedElementIds(new Vector<String>(Arrays.asList("kista_1", "kista_2"))) //
.controllerName("controllerName") //
+ .customAdapterClass("") //
.build());
private static final String POLICY_1_ID = "policyId1";
diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RicSynchronizationTaskTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RicSynchronizationTaskTest.java
index a5795ac9..e7e0a561 100644
--- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RicSynchronizationTaskTest.java
+++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RicSynchronizationTaskTest.java
@@ -110,6 +110,7 @@ class RicSynchronizationTaskTest {
.baseUrl("baseUrl1") //
.managedElementIds(Collections.emptyList()) //
.controllerName("controllerName") //
+ .customAdapterClass("") //
.build());
policy1 = createPolicy("policyId1", false);
policyTypes = new PolicyTypes(appConfig);
diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/ServiceSupervisionTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/ServiceSupervisionTest.java
index 294b220c..8cdf2cc7 100644
--- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/ServiceSupervisionTest.java
+++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/ServiceSupervisionTest.java
@@ -75,6 +75,7 @@ class ServiceSupervisionTest {
.baseUrl("baseUrl") //
.managedElementIds(Collections.emptyList()) //
.controllerName("") //
+ .customAdapterClass("") //
.build();
private Ric ric = new Ric(ricConfig);
private PolicyType policyType = PolicyType.builder() //
diff --git a/a1-policy-management/src/test/resources/test_application_configuration.json b/a1-policy-management/src/test/resources/test_application_configuration.json
index 959f53fd..fef2382a 100644
--- a/a1-policy-management/src/test/resources/test_application_configuration.json
+++ b/a1-policy-management/src/test/resources/test_application_configuration.json
@@ -1,4 +1,4 @@
-{
+{
"config": {
"description": "Application configuration",
"ric": [
@@ -13,6 +13,7 @@
{
"name": "ric2",
"baseUrl": "http://localhost:8081/",
+ "customAdapterClass": "org.onap.ccsdk.oran.a1policymanagementservice.clients.StdA1ClientVersion2$Factory",
"managedElementIds": [
"kista_3",
"kista_4"
diff --git a/a1-policy-management/src/test/resources/test_application_configuration_with_dmaap_config.json b/a1-policy-management/src/test/resources/test_application_configuration_with_dmaap_config.json
index b00720c3..260dad2d 100644
--- a/a1-policy-management/src/test/resources/test_application_configuration_with_dmaap_config.json
+++ b/a1-policy-management/src/test/resources/test_application_configuration_with_dmaap_config.json
@@ -1,6 +1,6 @@
{
"config": {
- "//description" : "Test",
+ "description": "Test",
"controller": [
{
"name": "controller1",
@@ -22,6 +22,7 @@
{
"name": "ric2",
"baseUrl": "http://localhost:8085/",
+ "customAdapterClass": "org.onap.ccsdk.oran.a1policymanagementservice.clients.StdA1ClientVersion2$Factory",
"managedElementIds": [
"kista_3",
"kista_4"
@@ -53,4 +54,4 @@
}
}
}
-}
+} \ No newline at end of file
diff --git a/docs/architecture/architecture.rst b/docs/architecture/architecture.rst
index 1e0f0691..a9facd53 100755
--- a/docs/architecture/architecture.rst
+++ b/docs/architecture/architecture.rst
@@ -1,5 +1,5 @@
.. SPDX-License-Identifier: CC-BY-4.0
-.. Copyright 2021 Nordix Foundation
+.. Copyright 2022 Nordix Foundation
.. _architecture:
@@ -16,9 +16,9 @@ The CCSDK ORAN components add support for handling "A1 Policies" as defined for
The O-RAN A1 interface is defined by the `O-RAN Alliance <https://www.o-ran.org>`_
-*********************************************
-Architecture for ONAP Honolulu release
-*********************************************
+*******************
+Architecture Review
+*******************
This picture provides a overview of ONAP's A1 Controller architecture,
integration with other ONAP components and API resource/operation provided.
diff --git a/docs/consumedapis/consumedapis.rst b/docs/consumedapis/consumedapis.rst
index b572bc49..b7c42a97 100755
--- a/docs/consumedapis/consumedapis.rst
+++ b/docs/consumedapis/consumedapis.rst
@@ -1,5 +1,5 @@
.. SPDX-License-Identifier: CC-BY-4.0
-.. Copyright 2021 Nordix Foundation
+.. Copyright 2022 Nordix Foundation
Consumed APIs
=============
@@ -9,18 +9,21 @@ Policy Management Service application is interacting with two ONAP APIs and the
*********
-DMAAP API
+DMaaP API
*********
The A1 Policy Management Service API can also be accessed using *ONAP DMaaP*. To support this the `DMaaP Message Router API <https://docs.onap.org/projects/onap-dmaap-messagerouter-messageservice/en/latest/offeredapis/api.html>`_ is used.
*****************************************
-O-RAN A1 interface for A1 Policies (A1-P)
+O-RAN A1 Interface for A1 Policies (A1-P)
*****************************************
Southbound, the ONAP A1 Policy functions communicate with *near-RT-RIC* RAN functions using the **A1** interface, as defined by the `O-RAN Alliance <https://www.o-ran.org>`_
The *A1 Interface - Application Protocol Specification (A1-AP)* describe this interface. The specification can be viewed from the `O-RAN Alliance <https://www.o-ran.org>`_ website.
-
-An opensource implementation of a `near-RT-RIC <https://wiki.o-ran-sc.org/pages/viewpage.action?pageId=1179659>`_ is available from `O-RAN Software Community <https://o-ran-sc.org>`_. It supports a pre-spec version of the A1-AP. The ONAP A1 Policy functions described here also supports this A1 version (A1-OSC).
+The **Jakarta** ONAP A1 Policy functions implement the *A1 Policy* parts (*A1-P*) of A1-AP versions *v1.1*, *v2.0* and *v3.0*
+
+An opensource implementation of a `near-RT-RIC <https://wiki.o-ran-sc.org/pages/viewpage.action?pageId=1179659>`_ is available from the `O-RAN Software Community <https://o-ran-sc.org>`_. It supports a pre-spec version of the A1-AP. The ONAP A1 Policy functions described here also supports this A1 version (A1-OSC).
+
+An opensource implementation of an `A1 Simulator <https://wiki.o-ran-sc.org/pages/viewpage.action?pageId=3604819>`_ is also available from the `O-RAN Software Community <https://o-ran-sc.org>`_. It supports all versions of A1-AP.
diff --git a/docs/guide/developer-guide.rst b/docs/guide/developer-guide.rst
index 29c9f91d..866f6212 100644
--- a/docs/guide/developer-guide.rst
+++ b/docs/guide/developer-guide.rst
@@ -1,6 +1,6 @@
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
-.. Copyright (C) 2021 Nordix Foundation.
+.. Copyright (C) 2022 Nordix Foundation.
.. _developer_guide:
@@ -13,7 +13,7 @@ Source tree
+++++++++++
This provides CCSDK with "A1 Policy Management Service" and "A1 Adapter" functions.
-Each resource is implemented independently in a package corresponding to its name.
+Each resource is implemented independently in a sub-directory corresponding to its name.
A1 Policy Management Service
++++++++++++++++++++++++++++
@@ -34,7 +34,7 @@ A1 Policy Management Service provides a REST API for management of policies. It
The Policy Management Service can be accessed over the REST API, and with an equivalent interface using DMaaP. See :ref:`pms_api` for more information about the API.
-The configured A1 policies are stored presistently to survive a service restart.
+The configured A1 policies are stored persistently to survive a service restart.
Dependencies
------------
@@ -42,19 +42,28 @@ 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 APIs 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
+- `Lombok <https://github.com/rzwitserloot/lombok>`_ to generate code, such as getters and setters
+- `Awaitility <https://github.com/awaitility/awaitility>`_ to test asynchronous functionality
+
To get a complete list of all dependencies, use command "mvn dependency:tree".
Configuration
-------------
There are two configuration files for A1 Policy Management Service, *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.
+The first (*config/application_configuration.json*) contains configuration needed by the application, such as which near-RT-RICs, controller, or DMaaP topic to use.
+The second (*config/application.yaml*) contains logging and security configurations.
-For more information about these configuration files can be found as comments in the sample files provided with the source code, or on the `ONAP wiki <https://wiki.onap.org/display/DW/O-RAN+A1+Policies+in+ONAP+Honolulu>`_
+For more information about these configuration files can be found as comments in the sample files provided with the source code, or on the `ONAP wiki <https://wiki.onap.org/display/DW/O-RAN+A1+Policies+in+ONAP+Jakarta>`_
-Static configuration (application.yaml)
----------------------------------------
+Static configuration - Settings that cannot be changed at runtime (*application.yaml*)
+--------------------------------------------------------------------------------------
The file *./config/application.yaml* is read by the application at startup. It provides the following configurable features:
@@ -67,18 +76,27 @@ The file *./config/application.yaml* is read by the application at startup. It p
* SSL parameters for setting up using of key store and trust store databases.
* Usage of HTTP(S) Proxy; if configured, the proxy will be used for southbound access to the NearRT-RICs
- * logging; setting of of which information that is logged.
+ * logging; setting for which information is logged.
+ * auth-token; optional authorization token to use for REST call.
* filepath; the local path to a file used for dynamic configuration (if used). See next chapter.
For details about the parameters in this file, see documentation in the file.
-Dynamic configuration
----------------------
-
-The component has configuration that can be updated in runtime. This configuration is loaded from a file (accessible from the container). The configuration is re-read and refreshed at regular intervals. This file based configuration can be updated or read via the REST API, See :ref:`pms_api`.
+Dynamic configuration - Settings that can be changed at runtime (*application_configuration.json* or REST or ConfigMap)
+-------------------------------------------------------------------------------------------------------------------------------
+The component has configuration that can be updated in runtime. This configuration can either be loaded from a file (accessible from the container), or from a CBS/Consul database (Cloudify), or using the Configuration REST API. The configuration is re-read and refreshed at regular intervals.
The configuration includes:
+ * Optional Controller configuration, e.g. an SDNC instance (with A1-Adapter)
+ * One entry for each near-RT-RIC, which includes:
+
+ * The base URL of the near-RT-RIC
+ * A optional list of O1 identifiers that near-RT-RIC is controlling. An application can query this service which near-RT-RIC should be addressed for which component (e.g. cells, sectors, locations, etc.) .
+ * An optional reference to the controller to use, or excluded if the near-RT-RIC should be accessed directly from the A1 Policy Management Service.
+
+ * Optional configuration for using of DMaaP. There can be one stream for requests to the component and an other stream for responses.
+
* Controller configuration, which includes information on how to access the a1-adapter
* One entry for each NearRT-RIC, which includes:
@@ -86,40 +104,34 @@ The configuration includes:
* A list of O1 identifiers that the NearRT RIC is controlling. An application can query this service which NearRT RIC should be addressed for controlling (for instance) a given Cell.
* An optional reference to the controller to use, or excluded if the NearRT-RIC can be accessed directly from this component.
- * Optional configuration for using of DMAAP. There can be one stream for requests to the component and an other stream for responses.
+ * Optional configuration for using of DMaaP. There can be one stream for requests to the component and an other stream for responses.
For details about the syntax of the file, there is an example in source code repository */config/application_configuration.json*. This file is also included in the docker container */opt/app/policy-agent/data/application_configuration.json_example*.
-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: ::
+Configuring certificates
+------------------------
- oran/a1-policy-management/config/application.yaml
+The A1 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, with an example is provided in the source code repository *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).
+(*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 default keystore, truststore, and application.yaml files can be overridden by mounting new files using the the docker "volumes"
+command for 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" onap/ccsdk-oran-a1policymanagementservice:1.2.0-SNAPSHOT
+ 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" onap/ccsdk-oran-a1policymanagementservice:1.4.0-SNAPSHOT
A1 Adapter (Internal)
+++++++++++++++++++++
@@ -132,8 +144,11 @@ Configuration of HTTP Proxy
---------------------------
In order to configure a HTTP Proxy for southbound connections:
- * Modify file: odlsli/src/main/properties/a1-adapter-api-dg.properties in CCSDK/distribution
- * Variable a1Mediator.proxy.url must contain Proxy URL
+ * Modify file: *odlsli/src/main/properties/a1-adapter-api-dg.properties*. This file is found in CCSDK/distribution for SDNC.
+ * In a running container this file is found at */opt/onap/ccsdk/data/properties/a1-adapter-api-dg.properties*
+ * Variable a1Mediator.proxy.url must contain the full Proxy URL
+
+After this configuration has been changed the A1 adapter needs to be either rebuilt, or restarted if the configuration is changed inside a container, or re-read by the container if externally accessible (e.g. K8s ConfigMap).
diff --git a/docs/humaninterfaces/humaninterfaces.rst b/docs/humaninterfaces/humaninterfaces.rst
index 9f1ea579..be271b43 100644
--- a/docs/humaninterfaces/humaninterfaces.rst
+++ b/docs/humaninterfaces/humaninterfaces.rst
@@ -1,5 +1,5 @@
.. SPDX-License-Identifier: CC-BY-4.0
-.. Copyright 2021 Nordix Foundation
+.. Copyright 2022 Nordix Foundation
Human Interfaces
@@ -8,4 +8,4 @@ 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>`_ from the `O-RAN-SC NONRTRIC Project <https://wiki.o-ran-sc.org/display/RICNR>`_.
-Any "Rest Client" application may be used (Postman, ...) to interact with the Policy Management Service application via the :ref:`pms_api`
+Any "REST Client" application may be used (Postman, ...) to interact with the Policy Management Service application via the :ref:`pms_api`
diff --git a/docs/index.rst b/docs/index.rst
index 613ff566..c5be7965 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -1,6 +1,6 @@
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
-.. Copyright 2020 Nordix Foundation.
+.. Copyright 2022 Nordix Foundation.
.. _master_index:
ccsdk/oran
diff --git a/docs/media/ONAP-A1ControllerArchitecture.png b/docs/media/ONAP-A1ControllerArchitecture.png
index ded44fbc..2d521ef2 100644
--- a/docs/media/ONAP-A1ControllerArchitecture.png
+++ b/docs/media/ONAP-A1ControllerArchitecture.png
Binary files differ
diff --git a/docs/offeredapis/offeredapis.rst b/docs/offeredapis/offeredapis.rst
index 1ef7dd0c..28f00835 100644
--- a/docs/offeredapis/offeredapis.rst
+++ b/docs/offeredapis/offeredapis.rst
@@ -1,7 +1,7 @@
.. This work is licensed under a Creative Commons Attribution 4.0
International License.
.. http://creativecommons.org/licenses/by/4.0
-.. Copyright 2020 Nordix Foundation
+.. Copyright 2022 Nordix Foundation
.. _offered_apis:
@@ -12,7 +12,7 @@ Offered APIs
Introduction
------------
-The north bound REST API of the A1 Policy Management Service provides convenient methods to handle policies.
+The north-bound REST API of the A1 Policy Management Service provides convenient methods to handle A1 policies.
Overall architecture for O-RAN A1 Policy functions
diff --git a/docs/offeredapis/swagger/a1-adapter-api.yaml b/docs/offeredapis/swagger/a1-adapter-api.yaml
index 1db84156..65e1ebf5 100644
--- a/docs/offeredapis/swagger/a1-adapter-api.yaml
+++ b/docs/offeredapis/swagger/a1-adapter-api.yaml
@@ -8,7 +8,7 @@ info:
email: nonrtric@est.tech
description: >-
The O-RAN A1 Adapter provides an internal REST API for management of A1
- policices, useful for test and verification. <b>Note!</b> For production,
+ policies, 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!
diff --git a/docs/offeredapis/swagger/pms-api.json b/docs/offeredapis/swagger/pms-api.json
index 2b8fb739..9fc8e7bb 100644
--- a/docs/offeredapis/swagger/pms-api.json
+++ b/docs/offeredapis/swagger/pms-api.json
@@ -79,7 +79,7 @@
},
"keep_alive_interval_seconds": {
"format": "int64",
- "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.",
+ "description": "keep alive interval for the service. This is a heartbeat supervision of the service, which in regular intervals must invoke a 'keepalive' REST call. When a service does not invoke this call within the given time, it is considered unavailable. An unavailable service will be automatically deregistered and its policies will be deleted. Value 0 means no timeout supervision.",
"type": "integer"
}
}
@@ -144,7 +144,7 @@
"description": "Policy type",
"type": "object",
"properties": {"policy_schema": {
- "description": "Policy type json scema. The schema is a json object following http://json-schema.org/draft-07/schema",
+ "description": "Policy type json schema. The schema is a json object following http://json-schema.org/draft-07/schema",
"type": "object"
}}
},
@@ -335,7 +335,7 @@
}},
"/a1-policy/v2/rics/ric": {"get": {
"summary": "Returns info for one Near-RT RIC",
- "description": "Either a Near-RT RIC identity or a Mananged Element identity can be specified.<br>The intention with Mananged Element identity is the ID used in O1 for accessing the traffical element (such as the ID of CU).",
+ "description": "Either a Near-RT RIC identity or a Managed Element identity can be specified.<br>The intention with Managed Element identity is the ID used in O1 for accessing the traffical element (such as the ID of CU).",
"operationId": "getRic",
"responses": {
"200": {
@@ -559,7 +559,7 @@
},
"/a1-policy/v2/services/{service_id}/keepalive": {"put": {
"summary": "Heartbeat indicates that the service is running",
- "description": "A registerred service must call this in regular intervals to indicate that it is in operation. Absence of this call will lead to that the service will be deregisterred and all its policies are removed.",
+ "description": "A registered service must call this in regular intervals to indicate that it is in operation. Absence of this call will lead to that the service will be deregistered and all its policies are removed.",
"operationId": "keepAliveService",
"responses": {
"200": {
@@ -798,7 +798,7 @@
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/service_callback_info_v2"}}},
"required": true
},
- "description": "The URL to this call is registerred at Service registration.",
+ "description": "The URL to this call is registered at Service registration.",
"operationId": "serviceCallback",
"responses": {"200": {
"description": "OK",
@@ -867,7 +867,7 @@
"name": "Copyright (C) 2020-2022 Nordix Foundation. Licensed under the Apache License.",
"url": "http://www.apache.org/licenses/LICENSE-2.0"
},
- "description": "<h2>General<\/h2><p>The O-RAN Non-RT RIC Policy Management Service provides a REST API for management of A1 policices. <br/>The main tasks of the service are:<\/p><ul><li>A1 Policy creation, modification and deletion.<\/li><li>Monitoring and maintaining consistency of the SMO view of A1 policies and the Near-RT RICs<\/li><li>Maintaining a view of supported Near-RT RIC policy types<\/li><li>Supervision of using services (R-APPs). When a service is unavailble, its policies are removed.<\/li><\/ul><h2>APIs provided by the service<\/h2><h3>A1 Policy Management<\/h3><p>This is an API for management of A1 Policies.<\/p><ul><li>A1 Policy retrieval, creation, modification and deletion.<\/li><li>Retrieval of supported A1 Policy types for a Near-RT RIC<\/li><li>Retrieval of status for existing A1 policies<\/li><\/ul><h3>Management of configuration<\/h3><p>API for updating and retrieval of the component configuration. Note that there other ways to maintain the configuration.<\/p><h3>Callbacks<\/h3><p>These are endpoints that are invoked by this service. The callbacks are registerred in this service at service registration.<\/p><h3>NearRT-RIC Repository<\/h3><p>This is an API that provides support for looking up a NearRT-RIC. Each A1 policy is targeted for one Near-RT RIC.<\/p><h3>Health Check<\/h3><p>API used for supervision of the PMS component.<\/p><h3>Service Registry and Supervision<\/h3><p>API used for registerring services that uses PMS. Each A1 policy is owned by a service. PMS can supervise each registerred service and will automatically remove policies for unavailable services.<\/p>",
+ "description": "<h2>General<\/h2><p>The O-RAN Non-RT RIC Policy Management Service provides a REST API for management of A1 policies. <br/>The main tasks of the service are:<\/p><ul><li>A1 Policy creation, modification and deletion.<\/li><li>Monitoring and maintaining consistency of the SMO view of A1 policies and the Near-RT RICs<\/li><li>Maintaining a view of supported Near-RT RIC policy types<\/li><li>Supervision of using services (R-APPs). When a service is unavailable, its policies are removed.<\/li><\/ul><h2>APIs provided by the service<\/h2><h3>A1 Policy Management<\/h3><p>This is an API for management of A1 Policies.<\/p><ul><li>A1 Policy retrieval, creation, modification and deletion.<\/li><li>Retrieval of supported A1 Policy types for a Near-RT RIC<\/li><li>Retrieval of status for existing A1 policies<\/li><\/ul><h3>Management of configuration<\/h3><p>API for updating and retrieval of the component configuration. Note that there other ways to maintain the configuration.<\/p><h3>Callbacks<\/h3><p>These are endpoints that are invoked by this service. The callbacks are registered in this service at service registration.<\/p><h3>NearRT-RIC Repository<\/h3><p>This is an API that provides support for looking up a NearRT-RIC. Each A1 policy is targeted for one Near-RT RIC.<\/p><h3>Health Check<\/h3><p>API used for supervision of the PMS component.<\/p><h3>Service Registry and Supervision<\/h3><p>API used for registering services that uses PMS. Each A1 policy is owned by a service. PMS can supervise each registered service and will automatically remove policies for unavailable services.<\/p>",
"title": "A1 Policy management service",
"version": "1.1.0"
},
diff --git a/docs/offeredapis/swagger/pms-api.yaml b/docs/offeredapis/swagger/pms-api.yaml
index 958ec0d4..3fd496bd 100644
--- a/docs/offeredapis/swagger/pms-api.yaml
+++ b/docs/offeredapis/swagger/pms-api.yaml
@@ -2,23 +2,23 @@ openapi: 3.0.1
info:
title: A1 Policy management service
description: <h2>General</h2><p>The O-RAN Non-RT RIC Policy Management Service provides
- a REST API for management of A1 policices. <br/>The main tasks of the service
- are:</p><ul><li>A1 Policy creation, modification and deletion.</li><li>Monitoring
- and maintaining consistency of the SMO view of A1 policies and the Near-RT RICs</li><li>Maintaining
+ a REST API for management of A1 policies. <br/>The main tasks of the service are:</p><ul><li>A1
+ Policy creation, modification and deletion.</li><li>Monitoring and maintaining
+ consistency of the SMO view of A1 policies and the Near-RT RICs</li><li>Maintaining
a view of supported Near-RT RIC policy types</li><li>Supervision of using services
- (R-APPs). When a service is unavailble, its policies are removed.</li></ul><h2>APIs
+ (R-APPs). When a service is unavailable, its policies are removed.</li></ul><h2>APIs
provided by the service</h2><h3>A1 Policy Management</h3><p>This is an API for
management of A1 Policies.</p><ul><li>A1 Policy retrieval, creation, modification
and deletion.</li><li>Retrieval of supported A1 Policy types for a Near-RT RIC</li><li>Retrieval
of status for existing A1 policies</li></ul><h3>Management of configuration</h3><p>API
for updating and retrieval of the component configuration. Note that there other
ways to maintain the configuration.</p><h3>Callbacks</h3><p>These are endpoints
- that are invoked by this service. The callbacks are registerred in this service
+ that are invoked by this service. The callbacks are registered in this service
at service registration.</p><h3>NearRT-RIC Repository</h3><p>This is an API that
provides support for looking up a NearRT-RIC. Each A1 policy is targeted for one
Near-RT RIC.</p><h3>Health Check</h3><p>API used for supervision of the PMS component.</p><h3>Service
- Registry and Supervision</h3><p>API used for registerring services that uses PMS.
- Each A1 policy is owned by a service. PMS can supervise each registerred service
+ Registry and Supervision</h3><p>API used for registering services that uses PMS.
+ Each A1 policy is owned by a service. PMS can supervise each registered service
and will automatically remove policies for unavailable services.</p>
license:
name: Copyright (C) 2020-2022 Nordix Foundation. Licensed under the Apache License.
@@ -152,8 +152,8 @@ paths:
tags:
- NearRT-RIC Repository
summary: Returns info for one Near-RT RIC
- description: Either a Near-RT RIC identity or a Mananged Element identity can
- be specified.<br>The intention with Mananged Element identity is the ID used
+ description: Either a Near-RT RIC identity or a Managed Element identity can
+ be specified.<br>The intention with Managed Element identity is the ID used
in O1 for accessing the traffical element (such as the ID of CU).
operationId: getRic
parameters:
@@ -434,9 +434,9 @@ paths:
tags:
- Service Registry and Supervision
summary: Heartbeat indicates that the service is running
- description: A registerred service must call this in regular intervals to indicate
+ description: A registered service must call this in regular intervals to indicate
that it is in operation. Absence of this call will lead to that the service
- will be deregisterred and all its policies are removed.
+ will be deregistered and all its policies are removed.
operationId: keepAliveService
parameters:
- name: service_id
@@ -742,7 +742,7 @@ paths:
tags:
- Callbacks
summary: Callback for Near-RT RIC status
- description: The URL to this call is registerred at Service registration.
+ description: The URL to this call is registered at Service registration.
operationId: serviceCallback
requestBody:
content:
@@ -897,9 +897,9 @@ components:
keep_alive_interval_seconds:
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
+ of the service, which in regular intervals 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
+ it is considered unavailable. An unavailable service will be automatically
deregistered and its policies will be deleted. Value 0 means no timeout
supervision.
format: int64
@@ -955,7 +955,7 @@ components:
properties:
policy_schema:
type: object
- description: Policy type json scema. The schema is a json object following
+ description: Policy type json schema. The schema is a json object following
http://json-schema.org/draft-07/schema
description: Policy type
policytype_id_list_v2:
diff --git a/docs/releasenotes/release-notes.rst b/docs/releasenotes/release-notes.rst
index 5a3eec01..5450e15f 100644
--- a/docs/releasenotes/release-notes.rst
+++ b/docs/releasenotes/release-notes.rst
@@ -1,7 +1,7 @@
.. 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.
+.. Copyright (C) 2022 Nordix Foundation.
.. _release_notes:
=============
@@ -37,6 +37,24 @@ Version history Policy Management Service
| 2021-02-23 | 1.1.1 | Dan Timoney | M3 version, |
| | | | Honolulu Release |
+------------+----------+-------------+-------------------+
+| 2021-03-25 | 1.1.2 | Dan Timoney | RC0 version, |
+| | | | Honolulu Release |
++------------+----------+-------------+-------------------+
+| 2021-04-05 | 1.1.3 | Dan Timoney | RC1 version, |
+| | | | Honolulu Release |
++------------+----------+-------------+-------------------+
+| 2021-04-19 | 1.1.4 | Dan Timoney | RC2 version, |
+| | | | Honolulu Release |
++------------+----------+-------------+-------------------+
+| 2021-05-10 | 1.1.5 | Dan Timoney | Final version, |
+| | | | Honolulu Release |
++------------+----------+-------------+-------------------+
+| 2021-09-02 | 1.2.0 | Dan Timoney | M3 version, |
+| | | | Istanbul Release |
++------------+----------+-------------+-------------------+
+| 2021-09-16 | 1.2.1 | Dan Timoney | M4 version, |
+| | | | Istanbul Release |
++------------+----------+-------------+-------------------+
| 2021-08-31 | 1.2.0 | Dan Timoney | RC1 version, |
| | | | Istanbul Release |
+------------+----------+-------------+-------------------+
@@ -66,6 +84,21 @@ Version history A1 Adapter
| 2021-02-23 | 1.1.1 | Dan Timoney | M3 version, |
| | | | Honolulu Release |
+------------+----------+-------------+-------------------+
+| 2021-03-25 | 1.1.2 | Dan Timoney | RC0 version, |
+| | | | Honolulu Release |
++------------+----------+-------------+-------------------+
+| 2021-04-05 | 1.1.3 | Dan Timoney | RC1 version, |
+| | | | Honolulu Release |
++------------+----------+-------------+-------------------+
+| 2021-04-19 | 1.1.4 | Dan Timoney | RC2 version, |
+| | | | Honolulu Release |
++------------+----------+-------------+-------------------+
+| 2021-05-10 | 1.1.5 | Dan Timoney | Final version, |
+| | | | Honolulu Release |
++------------+----------+-------------+-------------------+
+| 2021-09-02 | 1.2.0 | Dan Timoney | M3 version, |
+| | | | Istanbul Release |
++------------+----------+-------------+-------------------+
| 2021-08-31 | 1.2.0 | Dan Timoney | RC1 version, |
| | | | Istanbul Release |
+------------+----------+-------------+-------------------+
@@ -171,22 +204,117 @@ Honolulu, M3
| | |
+-----------------------------+-----------------------------------------------------+
-Istanbul, RC1
+Honolulu, RC0
+-------------
++-----------------------------+-----------------------------------------------------+
+| **Project** | CCSDK ORAN |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Repo/commit-ID** | ccsdk-oran/e9e8fda7dc7facf288d1652152ceb358977c1006 |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Release designation** | Honolulu |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Release date** | 2021-03-25 |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Purpose of the delivery** | Improvements in ORAN, RC0 version |
+| | |
++-----------------------------+-----------------------------------------------------+
+
+Honolulu, RC1
+-------------
++-----------------------------+-----------------------------------------------------+
+| **Project** | CCSDK ORAN |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Repo/commit-ID** | ccsdk-oran/a17d643fcee3240c98bf3e101c1eac5a2b53119a |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Release designation** | Honolulu |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Release date** | 2021-04-05 |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Purpose of the delivery** | Improvements in ORAN, RC1 version |
+| | |
++-----------------------------+-----------------------------------------------------+
+
+Honolulu, RC2
-------------
+-----------------------------+-----------------------------------------------------+
| **Project** | CCSDK ORAN |
| | |
+-----------------------------+-----------------------------------------------------+
+| **Repo/commit-ID** | ccsdk-oran/b4f33c2d6fef60df2e48d81e2f7cdbf6a66cb30d |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Release designation** | Honolulu |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Release date** | 2021-04-19 |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Purpose of the delivery** | Improvements in ORAN, RC2 version |
+| | |
++-----------------------------+-----------------------------------------------------+
+
+Honolulu, Final version
+-----------------------
++-----------------------------+-----------------------------------------------------+
+| **Project** | CCSDK ORAN |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Repo/commit-ID** | ccsdk-oran/9f99c19662c8190ad821144f3f4406c60d48025c |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Release designation** | Honolulu |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Release date** | 2021-05-10 |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Purpose of the delivery** | Improvements in ORAN, Final version |
+| | |
++-----------------------------+-----------------------------------------------------+
+
+Istanbul, M3
+------------
++-----------------------------+-----------------------------------------------------+
+| **Project** | CCSDK ORAN |
+| | |
++-----------------------------+-----------------------------------------------------+
| **Repo/commit-ID** | ccsdk-oran/8a70f00cc986df657ddd3ab92f449f9e1690cf62 |
| | |
+-----------------------------+-----------------------------------------------------+
| **Release designation** | Istanbul |
| | |
+-----------------------------+-----------------------------------------------------+
-| **Release date** | 2021-08-31 |
+| **Release date** | 2021-09-02 |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Purpose of the delivery** | Improvements in ORAN, M3 version |
+| | |
++-----------------------------+-----------------------------------------------------+
+
+Istanbul, M4
+------------
++-----------------------------+-----------------------------------------------------+
+| **Project** | CCSDK ORAN |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Repo/commit-ID** | ccsdk-oran/9241d1d555884ba2d28eab9ed692f50a660ba2a5 |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Release designation** | Istanbul |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Release date** | 2021-09-16 |
| | |
+-----------------------------+-----------------------------------------------------+
-| **Purpose of the delivery** | Persistent storage, RC1 version |
+| **Purpose of the delivery** | Improvements in ORAN, M4 version |
| | |
+-----------------------------+-----------------------------------------------------+