Update latest CCSDK version 53/13353/3
authoraravind.est <aravindhan.a@est.tech>
Fri, 13 Sep 2024 15:54:01 +0000 (16:54 +0100)
committeraravind.est <aravindhan.a@est.tech>
Wed, 2 Oct 2024 15:11:03 +0000 (16:11 +0100)
This includes following changes:
* Handling non-transient policy creation
* Sonar issue/coverage fixes
* A1PMS root and policy types updated as per July edition
* Set serviceId in v2 policy_info to optional and blank by default
* Add database support
* Re-arrange application properties
* Spring boot upgrade to 3.3.2

Issue-ID: CCSDK-4033
Change-Id: Iaceaaebe02978e24f41d61bcf443508286bec74f
Signed-off-by: aravind.est <aravindhan.a@est.tech>
api/pms-api-v3.yaml
api/pms-api.json
api/pms-api.yaml
api/pms-api/index.html
config/application.yaml
docs/offeredapis/swagger/pms-api.json
docs/offeredapis/swagger/pms-api.yaml
onap/oran
pom.xml

index 3d39056..d2d613a 100644 (file)
@@ -53,7 +53,7 @@ info:
     url: https://www.onap.org/
     email: discuss-list@onap.com
 servers:
-  - url: '{apiRoot}/a1policymanagement/v1'
+  - url: '{apiRoot}/a1-policy-management/v1'
     variables:
       apiRoot:
         description: 'apiRoot is the Host:port/Domain name of the service  where the A1Pms running'
@@ -168,7 +168,7 @@ paths:
       summary: Query Near-RT RIC information
       tags:
         - NearRT-RIC Repository
-  /policytypes:
+  /policy-types:
     get:
       operationId: getPolicyTypes
       parameters:
@@ -238,7 +238,7 @@ paths:
       description: Query policy type identities
       tags:
         - A1 Policy Management
-  /policytypes/{policyTypeId}:
+  /policy-types/{policyTypeId}:
     get:
       operationId: getPolicyTypeDefinition
       parameters:
@@ -436,7 +436,7 @@ paths:
       description: "Returns a list of A1 policies matching given search criteria.\
             \ <br>If several query parameters are defined, the policies matching all conditions\
             \ are returned."
-      operationId: getPolicyIds
+      operationId: getAllPolicies
       parameters:
         - description: Select policies of a given policy type identity.
           explode: true
@@ -877,9 +877,6 @@ components:
             'rApp ID'
         policyObject:
           $ref: '#/components/schemas/PolicyObject'
-        statusNotificationUri:
-          description: Callback URI for policy status updates
-          type: string
         policyTypeId:
           description: identity of the policy type
           type: string
index 00935a8..f67bca8 100644 (file)
         "description" : "Information about policy types"
       },
       "policy_info" : {
-        "required" : [ "policy_data", "policy_id", "policytype_id", "ric_id", "service_id" ],
+        "required" : [ "policy_data", "policy_id", "policytype_id", "ric_id" ],
         "type" : "object",
         "properties" : {
           "ric_id" : {
           },
           "service_id" : {
             "type" : "string",
-            "description" : "the identity of the service owning the policy. This can be used to group the policies (it is possible to get all policies associated to a service). Note that the service does not need to be registered."
+            "description" : "the identity of the service owning the policy. This can be used to group the policies (it is possible to get all policies associated to a service). Note that the service does not need to be registered.",
+            "default" : ""
           },
           "policy_data" : {
             "type" : "object",
index 699d5ed..1c25e05 100644 (file)
@@ -1307,6 +1307,7 @@ components:
             used to group the policies (it is possible to get all policies associated
             to a service). Note that the service does not need to be registered.
           type: string
+          default: ""
         policy_data:
           description: the configuration of the policy
           type: object
@@ -1319,7 +1320,6 @@ components:
       required:
         - ric_id
         - policy_id
-        - service_id
         - policy_data
         - policytype_id
       type: object
index 1c3ccb1..60783dc 100644 (file)
@@ -941,7 +941,7 @@ ul.nav-tabs {
   }
 };
     defs["policy_info"] = {
-  "required" : [ "policy_data", "policy_id", "policytype_id", "ric_id", "service_id" ],
+  "required" : [ "policy_data", "policy_id", "policytype_id", "ric_id" ],
   "type" : "object",
   "properties" : {
     "ric_id" : {
@@ -961,7 +961,8 @@ ul.nav-tabs {
     },
     "service_id" : {
       "type" : "string",
-      "description" : "the identity of the service owning the policy. This can be used to group the policies (it is possible to get all policies associated to a service). Note that the service does not need to be registered."
+      "description" : "the identity of the service owning the policy. This can be used to group the policies (it is possible to get all policies associated to a service). Note that the service does not need to be registered.",
+      "default" : ""
     },
     "policy_data" : {
       "type" : "object",
index 39b4486..205c21a 100644 (file)
@@ -3,6 +3,7 @@
 # ONAP : ccsdk oran
 # ================================================================================
 # Copyright (C) 2020-2023 Nordix Foundation. All rights reserved.
+# Copyright (C) 2024 OpenInfra Foundation Europe. 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.
 # SPDX-License-Identifier: Apache-2.0
 # ============LICENSE_END=========================================================
 #
-spring:
-  application:
-    name: a1-pms
-  profiles:
-    active: prod
-  main:
-    allow-bean-definition-overriding: true
-  aop:
-    auto: false
-management:
-  tracing:
-    propagation:
-      produce: ${ONAP_PROPAGATOR_PRODUCE:[W3C]}
-    sampling:
-      probability: 1.0
-  endpoints:
-    web:
-      exposure:
-        # Enabling of springboot actuator features. See springboot documentation.
-        include: "loggers,logfile,health,info,metrics,threaddump,heapdump,shutdown"
-  endpoint:
-    shutdown:
-      enabled: true
-lifecycle:
-  timeout-per-shutdown-phase: "20s"
-springdoc:
-  show-actuator: true
-logging:
-  # Configuration of logging
-  level:
-    ROOT: ERROR
-    org.springframework: ERROR
-    org.springframework.data: ERROR
-    org.springframework.web.reactive.function.client.ExchangeFunctions: ERROR
-    org.springframework.web.servlet.DispatcherServlet: ERROR
-    org.onap.ccsdk.oran.a1policymanagementservice: INFO
-  pattern:
-    console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] %logger{20} - %msg%n"
-    file: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] %logger{20} - %msg%n"
-  file:
-    name: /var/log/policy-agent/application.log
-server:
-   # Configuration of the HTTP/REST server. The parameters are defined and handeled by the springboot framework.
-   # See springboot documentation.
-   port : 8433
-   http-port: 8081
-   shutdown: "graceful"
-   ssl:
-      key-store-type: JKS
-      key-store-password: policy_agent
-      key-store: /opt/app/policy-agent/etc/cert/keystore.jks
-      key-password: policy_agent
-      key-alias: policy_agent
-      # trust-store-password:
-      # trust-store:
+
 app:
-  # Location of the component configuration file.
-  filepath: /opt/app/policy-agent/data/application_configuration.json
-  webclient:
-    # Configuration of the trust store used for the HTTP client (outgoing requests)
-    # The file location and the password for the truststore is only relevant if trust-store-used == true
-    # Note that the same keystore as for the server is used.
-    trust-store-used: false
-    trust-store-password: policy_agent
-    trust-store: /opt/app/policy-agent/etc/cert/truststore.jks
-    # Configuration of usage of HTTP Proxy for the southbound accesses.
-    # The HTTP proxy (if configured) will only be used for accessing NearRT RIC:s
-    # proxy-type can be either HTTP, SOCKS4 or SOCKS5
-    http.proxy-host:
-    http.proxy-port: 0
-    http.proxy-type: HTTP
-  # path where the service can store data. This parameter is not relevant if S3 Object store is configured.
-  vardata-directory: /var/policy-management-service
-  # the config-file-schema-path referres to a location in the jar file. If this property is empty or missing,
-  # no schema validation will be executed.
-  config-file-schema-path: /application_configuration_schema.json
   # A file containing an authorization token, which shall be inserted in each HTTP header (authorization).
   # If the file name is empty, no authorization token is sent.
   auth-token-file:
   # A URL to authorization provider such as OPA. Each time an A1 Policy is accessed, a call to this
   # authorization provider is done for access control. If this is empty, no fine grained access control is done.
   authorization-provider:
+  # the config-file-schema-path referres to a location in the jar file. If this property is empty or missing,
+  # no schema validation will be executed.
+  config-file-schema-path: /application_configuration_schema.json
+  # Postgres database usage is enabled using the below parameter.
+  # If this is enabled, the application will use postgres database for storage.
+  # This overrides the s3(s3.bucket) or file store(vardata-directory) configuration if enabled.
+  database-enabled: false
+  # Location of the component configuration file.
+  filepath: /opt/app/policy-agent/data/application_configuration.json
   # S3 object store usage is enabled by defining the bucket to use. This will override the vardata-directory parameter.
   s3:
     endpointOverride: http://localhost:9000
     accessKeyId: minio
     secretAccessKey: miniostorage
     bucket:
+  webclient:
+    # Configuration of usage of HTTP Proxy for the southbound accesses.
+    # The HTTP proxy (if configured) will only be used for accessing NearRT RIC:s
+    # proxy-type can be either HTTP, SOCKS4 or SOCKS5
+    http.proxy-host:
+    http.proxy-port: 0
+    http.proxy-type: HTTP
+    # Configuration of the trust store used for the HTTP client (outgoing requests)
+    # The file location and the password for the truststore is only relevant if trust-store-used == true
+    # Note that the same keystore as for the server is used.
+    trust-store-used: false
+    trust-store-password: policy_agent
+    trust-store: /opt/app/policy-agent/etc/cert/truststore.jks
+  # path where the service can store data. This parameter is not relevant if S3 Object store is configured.
+  vardata-directory: /var/policy-management-service
+lifecycle:
+  timeout-per-shutdown-phase: "20s"
+logging:
+  # Configuration of logging
+  file:
+    name: /var/log/policy-agent/application.log
+  level:
+    ROOT: ERROR
+    org.onap.ccsdk.oran.a1policymanagementservice: INFO
+    org.springframework: ERROR
+    org.springframework.data: ERROR
+    org.springframework.web.reactive.function.client.ExchangeFunctions: ERROR
+    org.springframework.web.servlet.DispatcherServlet: ERROR
+  pattern:
+    console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] %logger{20} - %msg%n"
+    file: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] %logger{20} - %msg%n"
+management:
+  endpoint:
+    shutdown:
+      enabled: true
+  endpoints:
+    web:
+      exposure:
+        # Enabling of springboot actuator features. See springboot documentation.
+        include: "loggers,logfile,health,info,metrics,threaddump,heapdump,shutdown"
+  tracing:
+    propagation:
+      produce: ${ONAP_PROPAGATOR_PRODUCE:[W3C]}
+    sampling:
+      probability: 1.0
 otel:
+  exporter:
+    otlp:
+      traces:
+        endpoint: ${ONAP_OTEL_EXPORTER_ENDPOINT:http://jaeger:4317}
+        protocol: ${ONAP_OTEL_EXPORTER_PROTOCOL:grpc}
+  logs:
+    exporter: none
+  metrics:
+    exporter: none
   sdk:
     disabled: ${ONAP_SDK_DISABLED:true}
     south: ${ONAP_TRACING_SOUTHBOUND:true}
@@ -115,12 +105,44 @@ otel:
     sampler:
       jaeger_remote:
         endpoint: ${ONAP_OTEL_SAMPLER_JAEGER_REMOTE_ENDPOINT:http://jaeger:14250}
-  exporter:
-    otlp:
-      traces:
-        protocol: ${ONAP_OTEL_EXPORTER_PROTOCOL:grpc}
-        endpoint: ${ONAP_OTEL_EXPORTER_ENDPOINT:http://jaeger:4317}
-  metrics:
-    exporter: none
-  logs:
-    exporter: none
+server:
+  # Configuration of the HTTP/REST server. The parameters are defined and handeled by the springboot framework.
+  # See springboot documentation.
+  port : 8433
+  http-port: 8081
+  shutdown: "graceful"
+  ssl:
+    key-store-type: JKS
+    key-store-password: policy_agent
+    key-store: /opt/app/policy-agent/etc/cert/keystore.jks
+    key-password: policy_agent
+    key-alias: policy_agent
+    # trust-store-password:
+    # trust-store:
+spring:
+  aop:
+    auto: false
+  application:
+    name: a1-pms
+  flyway:
+    # Configuration of the postgres database to be used for database migration.
+    # This is where the flyway maintains the information about the sql files loaded.
+    # These values can be passed via configmap/secret/env variable based on the installation.
+    # By default, Flyway uses location classpath:db/migration to load the sql files.
+    # This can be overridden using "flyway.locations" to have a different location.
+    baseline-on-migrate: true
+    url: "jdbc:postgresql://127.0.0.1:5432/a1pms"
+    user: a1pms
+    password: mypwd
+  main:
+    allow-bean-definition-overriding: true
+  profiles:
+    active: prod
+  r2dbc:
+    # Configuration of the postgres database to be used by the application.
+    # These values can be passed via configmap/secret/env variable based on the installation.
+    url: "r2dbc:postgresql://127.0.0.1:5432/a1pms"
+    username: a1pms
+    password: mypwd
+springdoc:
+  show-actuator: true
\ No newline at end of file
index 00935a8..f67bca8 100644 (file)
         "description" : "Information about policy types"
       },
       "policy_info" : {
-        "required" : [ "policy_data", "policy_id", "policytype_id", "ric_id", "service_id" ],
+        "required" : [ "policy_data", "policy_id", "policytype_id", "ric_id" ],
         "type" : "object",
         "properties" : {
           "ric_id" : {
           },
           "service_id" : {
             "type" : "string",
-            "description" : "the identity of the service owning the policy. This can be used to group the policies (it is possible to get all policies associated to a service). Note that the service does not need to be registered."
+            "description" : "the identity of the service owning the policy. This can be used to group the policies (it is possible to get all policies associated to a service). Note that the service does not need to be registered.",
+            "default" : ""
           },
           "policy_data" : {
             "type" : "object",
index 699d5ed..1c25e05 100644 (file)
@@ -1307,6 +1307,7 @@ components:
             used to group the policies (it is possible to get all policies associated
             to a service). Note that the service does not need to be registered.
           type: string
+          default: ""
         policy_data:
           description: the configuration of the policy
           type: object
@@ -1319,7 +1320,6 @@ components:
       required:
         - ric_id
         - policy_id
-        - service_id
         - policy_data
         - policytype_id
       type: object
index ad80065..8909784 160000 (submodule)
--- a/onap/oran
+++ b/onap/oran
@@ -1 +1 @@
-Subproject commit ad800650d7958985a34ac30d77407a9ce7c2de1a
+Subproject commit 890978456c238de30d547d5d4a2992b5cace62ee
diff --git a/pom.xml b/pom.xml
index 9ed284d..d3c7eca 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -27,7 +27,7 @@
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>3.2.5</version>
+        <version>3.3.2</version>
         <relativePath />
     </parent>
     <groupId>org.o-ran-sc.nonrtric.plt</groupId>
@@ -59,6 +59,8 @@
         <sonar-maven-plugin.version>3.7.0.1746</sonar-maven-plugin.version>
         <jacoco-maven-plugin.version>0.8.8</jacoco-maven-plugin.version>
         <exec-maven-plugin.version>3.1.0</exec-maven-plugin.version>
+        <localstack.version>1.20.1</localstack.version>
+        <junit.jupiter.version>1.20.1</junit.jupiter.version>
     </properties>
     <dependencies>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-webflux</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-r2dbc</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.postgresql</groupId>
+            <artifactId>postgresql</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.postgresql</groupId>
+            <artifactId>r2dbc-postgresql</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.flywaydb</groupId>
+            <artifactId>flyway-core</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.aspectj</groupId>
             <artifactId>aspectjweaver</artifactId>
             <optional>true</optional>
             <scope>runtime</scope>
         </dependency>
+        <dependency>
+            <groupId>org.testcontainers</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <version>${junit.jupiter.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.testcontainers</groupId>
+            <artifactId>localstack</artifactId>
+            <version>${localstack.version}</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>