CPS Documentation

CPS Core

CPS Overview

The Configuration Persistence Service (CPS) is a platform component that is designed to serve as a data repository for runtime data that needs persistence.

Types of data that is stored:

  • Configuration Parameters

    These are configuration parameters that are used by xNFs during installation & commissioning. Configuration parameters are typically used before the xNF has been brought up or is operational. For example, a 5G Network configuration parameter for a PNFs that sets the mechanical tilt which is a configuration setting upon installation.

  • Operational Parameters

    This operational information could be either an actual state or configuration of a network service or device. These are parameters that are derived, discovered, computed that are used by xNFs during run time AFTER the xNF becomes operational i.e. AFTER it has “booted up”, been installed or configured. For example, in 5G Network, 5G PNFs may need to adjust a tower electrical antenna tilt. These operational parameters are Exo-inventory information, meaning it is information that doesn’t belong in A&AI. In principle, some parameters might be both configuration and operational parameters depending on how they are used.

CPS Components

CPS-Core

This is the component of CPS which encompasses the generic storage of Yang module data.

NCMP

The Network Configuration Management Proxy (NCMP) provides access to network configuration data and is a part of CPS-Core. NCMP accesses all network Data-Model-Inventory (DMI) information via NCMP-DMI-Plugins. The ONAP0-DMI-Plugin described in the next section is one such plugin.

Note: This documentation will often refer to “CPS-NCMP” which is the component (container image) that contains both CPS-Core and NCMP since NCMP is not a stand-alone component even though CPS-Core could be deployed without the NCMP extension.

NCMP-DMI-Plugin

The Data-Model-Inventory (DMI) Plugin is a rest interface used to synchronize CM-Handles data between CPS and DMI through the DMI-Plugin. This is built previously from the CPS-NF-Proxy component.

CPS-Temporal

This service is responsible to provide a time oriented perspective for operational network data. It provides features to store and retrieve sequences of configurations or states along with the associated times when they occurred or have been observed.

CPS Project

CPS Architecture

High Level Component Definition and Architectural Relationships

The Configuration Persistence Service (CPS) provides storage for run-time configuration and operational parameters that need to be used by ONAP.

In this release CPS is no longer a stand alone component and is released along with Cps-Temporal and the NCMP-DMI-Plugin.

Project page describing eventual scope and ambition is here: Configuration Persistence Service Project

_images/star.png

Note: SDC and AAI interfaces have not yet been implemented.

_images/cps-r9-arch-diagram.png

API definitions

Configuration Persistence Service provides the following interfaces.

Interface name

Interface definition

Interface capabilities

Protocol

CPS-E-01

Administrative Data Management

  • create dataspace

  • create/delete schema set

  • create/delete anchor

REST

CPS-E-02

Generic Data Access

  • create data node

  • read data node by xpath with or without descendants

  • update data node by xpath with or without descendants

REST

CPS-E-03

Generic Data Search

  • query data nodes by xpath prefix and attribute value

REST

CPS-E-04

Change Notification

  • Kafka is used as the event messaging system

  • running instance is supplied independently from ONAP DMaaP component or any Kafka instance deployed from ONAP

  • published events contain Timestamp, Dataspace, Schema set, Anchor and JSON Data Payload

DMaaP

CPS-E-05

xNF Data Access

  • read xNF data

  • query xNF data

REST

CPS-E-06

Temporal Data Access

  • data storage and access

REST

CPS-E-07

Admin

  • logging levels and configuration

  • monitoring

  • health including liveliness state and readiness state

  • metrics through Prometheus

Various

The CPS Basic Concepts are described in CPS Modeling.

CPS Admin Guide

Logging Configuration

Note

Default logging level of “logging.level.org.onap.cps” is set to “INFO”.

logging:
 level:
     org:
         springframework: INFO
         onap:
             cps: INFO
CPS Log pattern
<pattern>
        {
          "timestamp" : "%timestamp", // 2022-01-28 18:39:17.768
          "severity": "%level",   // DEBUG
          "service": "${springAppName}",  // cps-application
          "trace": "${TraceId}", // e17da1571e518c59
          "span": "${SpanId}", // e17da1571e518c59
          "pid": "${PID}", //11128
          "thread": "%thread", //tp1901272535-29
          "class": "%logger{40}", .// o.onap.cps.aop.CpsLoggingAspectService
          "rest": "%message" // Execution time ...
        }
</pattern>
Change logging level
  • Curl command 1. Check current log level of “logging.level.org.onap.cps” if it is set to it’s default value (INFO)

curl --location --request GET 'http://{cps-service-name:cps-management-port}/manage/loggers/org.onap.cps' \
--header 'Content-Type: application/json; charset=utf-8'

Response body : HTTP Status 200

{
    "configuredLevel": "INFO",
    "effectiveLevel": "INFO"
}
  • Curl command 2. Change logging level of “logging.level.org.onap.cps” to “DEBUG”

Note

Below-mentioned endpoint will change the log level at runtime. After executing the curl command “effectiveLevel” will set and applied immediately without restarting CPS service.

curl --location --request POST 'http://{cps-service-name:cps-management-port}/manage/loggers/org.onap.cps' \
--header 'Content-Type: application/json; charset=utf-8' \
--data-raw '{
                "configuredLevel": "DEBUG"
            }'

Response body : HTTP Status 204
  • Curl command 3. Verify if log level of “logging.level.org.onap.cps” is changed from ‘INFO’ to ‘DEBUG’

curl --location --request GET 'http://{cps-service-name:cps-management-port}/manage/loggers/org.onap.cps' \
--header 'Content-Type: application/json; charset=utf-8'

Response body : HTTP Status 200

{
"configuredLevel": "DEBUG",
"effectiveLevel": "DEBUG"
}
Location of log files

By default, Spring Boot will only log to the console and will not write log files.

CPS service console
Measure Execution Time of CPS Service

Note

Make sure effective log level of “logging.level.org.onap.cps” is ‘DEBUG’. This can be verified by executing curl command 3.

Execute CPS service that you want to calculate total elapsed time and log as shown below

2022-01-28 18:39:17.679 DEBUG [cps-application,e17da1571e518c59,e17da1571e518c59] 11128 --- [tp1901272535-29] o.onap.cps.aop.CpsLoggingAspectService   : Execution time of : DataspaceRepository.getByName() with argument[s] = [test42] having result = org.onap.cps.spi.entities.DataspaceEntity@68ded236 :: 205 ms

2022-01-28 18:39:17.726 DEBUG [cps-application,e17da1571e518c59,e17da1571e518c59] 11128 --- [tp1901272535-29] o.onap.cps.aop.CpsLoggingAspectService   : Execution time of : AnchorRepository.getByDataspaceAndName() with argument[s] = [org.onap.cps.spi.entities.DataspaceEntity@68ded236, bookstore] having result = org.onap.cps.spi.entities.AnchorEntity@71c47fb1 :: 46 ms

2022-01-28 18:39:17.768 DEBUG [cps-application,e17da1571e518c59,e17da1571e518c59] 11128 --- [tp1901272535-29] o.onap.cps.aop.CpsLoggingAspectService   : Execution time of : CpsAdminPersistenceServiceImpl.getAnchor() with argument[s] = [test42, bookstore] having result = Anchor(name=bookstore, dataspaceName=test42, schemaSetName=bookstore) :: 299 ms

2022-01-28 18:39:17.768 DEBUG [cps-application,e17da1571e518c59,e17da1571e518c59] 11128 --- [tp1901272535-29] o.onap.cps.aop.CpsLoggingAspectService   : Execution time of : CpsAdminServiceImpl.getAnchor() with argument[s] = [test42, bookstore] having result = Anchor(name=bookstore, dataspaceName=test42, schemaSetName=bookstore) :: 305 ms

2022-01-28 18:39:17.843 DEBUG [cps-application,e17da1571e518c59,e17da1571e518c59] 11128 --- [tp1901272535-29] o.onap.cps.aop.CpsLoggingAspectService   : Execution time of : AdminRestController.getAnchor() with argument[s] = [test42, bookstore] having result = <200 OK OK,class AnchorDetails {
 name: bookstore
 dataspaceName: test42
 schemaSetName: bookstore
},[]> :: 419 ms

Warning

Revert logging level of “logging.level.org.onap.cps” to ‘INFO’ again to prevent unnecessary logging and impacts on performance.

Logging & Diagnostics

General Guidelines

CPS-Core logs are sent to STDOUT in order to leverage the Kubernetes logging architecture.

These logs are available using the following command:

kubectl logs <cps-core-pod>

The default configuration for CPS logs is the INFO level.

This architecture also makes all logs ready to be sent to an Elastic-search Log-stash and Kibana (ELK) stack or similar.

Enabling tracing for all executed sql statements is done by changing hibernate loggers log level

Logger configuration is provided as a chart resource :

cps-component-service-name

logback.xml location

cps-core

logback.xml

cps-temporal

logback.xml

ncmp-dmi-plugin

Not yet applicable to DMI-Plugin

Monitoring

Once CPS-Core is deployed, information related to the running instance of the application is available

http://<cps-component-service-name>:8081/manage/info/
Health

Cps-Core health status and state can be checked using the following endpoint. This also includes both the liveliness state and readiness state.

http://<cps-component-service-name>:8081/manage/health/
Metrics

Prometheus Metrics can be checked at the following endpoint

http://<cps-component-service-name>:8081/manage/prometheus

CPS Design

Offered APIs

CPS supports the public APIs listed in the following sections.

CPS-Core

CPS-Core functionality.

CPS Rest OpenApi Specification

CPS-NCMP

XNF data access and module information.

CPS NCMP RestOpenApi Specification

CPS-NCMP-Inventory

DMI-Plugin Inventory.

CPS NCMP RestOpenApi Inventory Specification

View Offered APIs

The standard for API definition in the RESTful API world is the OpenAPI Specification (OAS). The OAS 3, which is based on the original “Swagger Specification”, is being widely used in API developments.

Specification can be accessed using following URI:

http://<hostname>:<port>/v3/api-docs?group=cps-docket

Additionally, the Swagger User Interface can be found at the following URI. The component may be changed between CPS-Core, CPS-NCMP and CPS-NCMP-Inventory using the drop down table in the top right:

http://<hostname>:<port>/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config#/

Consumed APIs

CPS Core uses API’s from the following ONAP components

  • DMI-Plugin: REST based interface which is used to provide integration and allow the DMI registry API’s have access to the corresponding NCMP API’s within CPS Core. More information on the DMI-Plugins offered APIs can be found on the DMI-Plugin’s Design Page.

CPS Path

Several CPS APIs use the cps-path (or cpsPath in Java API) parameter. The CPS Path is described in detail in CPS Path.

CPS Modeling

CPS-Core Modeling

Data Model
Basic entities relationship
Basic Concepts

Administrative entities

  • Dataspace is a primary logical separation of data.

    Any application can define its own dataspace to store the model(s) and data it owns. Dataspace is uniquely identified by it’s name.

  • Schema Set describes a data model(s).

    Schema Set holds reference(s) to single or multiple YANG modules. Schema Set belongs to dataspace and uniquely identified by its name (within its own dataspace). Same YANG resources (source files) can be referenced by multiple schema sets from different dataspaces.

  • Anchor identifies the unique data set (data record) within a dataspace.

    Anchor always references a schema set within same dataspace which describes a data model of associated data. Multiple anchors may reference same schema set. Anchor is uniquely identified by its name (within own dataspace).

Data

  • Data Node represents a data fragment.

    Each data node can have zero or more descendants and together they form a data instance tree. The data node tree belongs to an anchor.

    Data node is representing a data fragment described in a YANG model as a container and/or a list. The data described as a leaf and/or a leaf-list are stored within a parent data node.

    The data node position within a tree is uniquely identified by the node’s unique xpath which can be used for partial data query.

Querying

  • CPS Path is used to query data nodes.

CPS Path
Introduction

Several CPS APIs use the CPS path (or cpsPath in Java API) parameter. The CPS path parameter is used for querying xpaths. CPS path is inspired by the XML Path Language (XPath) 3.1.

This section describes the functionality currently supported by CPS Path.

Sample Data

The xml below describes some basic data to be used to illustrate the CPS Path functionality.

<shops>
   <bookstore name="Chapters">
      <bookstore-name>Chapters</bookstore-name>
      <categories code="1" name="SciFi" numberOfBooks="2">
         <books>
            <book title="2001: A Space Odyssey" price="5">
               <label>sale</label>
               <label>classic</label>
               <edition>1968</edition>
               <edition>2018</edition>
          </book>
            <book title="Dune" price="5">
               <label>classic</label>
               <edition>1965</edition>
            </book>
         </books>
      </categories>
      <categories code="2" name="Kids" numberOfBooks="1">
         <books>
            <book title="Matilda" />
         </books>
      </categories>
   </bookstore>
</shops>

Note. ‘categories’ is a Yang List and ‘code’ is its key leaf. All other data nodes are Yang Containers. ‘label’ and ‘edition’ are both leaf-lists.

General Notes
  • String values must be wrapped in quotation marks " (U+0022) or apostrophes ' (U+0027).

  • String comparisons are case sensitive.

  • List key-fields containing \ or @[ will not be processed correctly when being referenced with such key values in absolute or descendant paths. This means such entries will be omitted from any query result. See CPS-500 Special Character Limitations of cpsPath Queries

Query Syntax

( <absolute-path> | <descendant-path> ) [ <leaf-conditions> ] [ <text()-condition> ] [ <ancestor-axis> ]

Each CPS path expression need to start with an ‘absolute’ or ‘descendant’ xpath.

absolute-path

Syntax: '/' <container-name> ( '[' <list-key> ']' )? ( '/' <containerName> ( '[' <list-key> ']' )? )*

  • container name: Any yang container or list.

  • list-key: One or more key-value pairs, each preceded by the @ symbol, combined using the and keyword.

  • The above van repeated any number of times.

Examples
  • /shops/bookstore

  • /shops/bookstore/categories[@code=1]

  • /shops/bookstore/categories[@code=1]/book

Limitations
  • Absolute paths must start with the top element (data node) as per the model tree.

  • Each list reference must include a valid instance reference to the key for that list. Except when it is the last element.

descendant-path

Syntax: '//' <container-name> ( '[' <list-key> ']' )? ( '/' <containerName> ( '[' <list-key> ']' )? )*

  • The syntax of a descendant path is identical to a absolute path except that it is preceded by a double slash //.

Examples
  • //bookstore

  • //categories[@code=1]/book

  • //bookstore/categories

Limitations
  • Each list reference must include a valid instance reference to the key for that list. Except when it is the last element.

leaf-conditions
Syntax: <xpath> '[' @<leaf-name1> '=' <leaf-value1> ( ' and ' @<leaf-name> '=' <leaf-value> )* ']'
  • xpath: Absolute or descendant or xpath to the (list) node which elements will be queried.

  • leaf-name: The name of the leaf which value needs to be compared.

  • leaf-value: The required value of the leaf.

Examples
  • /shops/bookstore/categories[@numberOfBooks=1]

  • //categories[@name="Kids"]

  • //categories[@name='Kids']

  • //categories[@code=1]/books/book[@title='Dune' and @price=5]

Limitations
  • Only the last list or container can be queried leaf values. Any ancestor list will have to be referenced by its key name-value pair(s).

  • Multiple attributes can only be combined using and. or and bracketing is not supported.

  • Only leaves can be used, leaf-list are not supported.

  • Only string and integer values are supported, boolean and float values are not supported.

Notes
  • For performance reasons it does not make sense to query using key leaf as attribute. If the key value is known it is better to execute a get request with the complete xpath.

text()-condition

The text()-condition can be added to any CPS path query.

Syntax: <cps-path> ( '/' <leaf-name> '[text()=' <string-value> ']' )?
  • cps-path: Any CPS path query.

  • leaf-name: The name of the leaf or leaf-list which value needs to be compared.

  • string-value: The required value of the leaf or leaf-list element as a string wrapped in quotation marks (U+0022) or apostrophes (U+0027). This wil still match integer values.

Examples
  • //book/label[text()="classic"]

  • //book/edition[text()="1965"]

Limitations
  • Only the last list or container can be queried for leaf values with a text() condition. Any ancestor list will have to be referenced by its key name-value pair(s).

  • Only one leaf or leaf-list can be tested.

  • Only string and integer values are supported, boolean and float values are not supported.

  • Since CPS cannot return individual leaves it will always return the container with all its leaves. Ancestor-axis can be used to specify a parent higher up the tree.

  • When querying a leaf value (instead of leaf-list) it is better, more performant to use a text value condition use @<leaf-name> as described above.

ancestor-axis

The ancestor axis can be added to any CPS path query but has to be the last part.

Syntax: <cps-path> ( '/ancestor::' <ancestor-path> )?
  • cps-path: Any CPS path query.

  • ancestor-path: Partial path to ancestors of the target node. This can contain one or more ancestor nodes separated by a /.

Examples
  • //book/ancestor::categories

  • //categories[@genre="SciFi"]/book/ancestor::bookstore

  • book/ancestor::categories[@code=1]/books

  • //book/label[text()="classic"]/ancestor::shop

Limitations
  • Ancestor list elements can only be addressed using the list key leaf.

  • List elements with compound keys are not supported.

NCMP Modeling

Data Model

NCMP stores DMI-Plugin and CM Handle relations using a data model described as per this Yang module.

DMI Yang Module

Basic Concepts
  • CM-Handle represents an instance a modeled Network Function(node) in ONAP.

    These are stored as Anchors within CPS-Core.

  • Datastores represent different views of the cm data.

    Datastores are defined for NCMP to access the CPS running or operational datastores. Currently supported datastores are:

    Datastore

    Configurations

    Data access type

    Passthrough-operational

    config-true, config-false

    read-only

    Passthrough-running

    config-true

    read-write

CPS Deployment

CPS OOM Charts

The CPS kubernetes chart is located in the OOM repository. This chart includes different cps components referred as <cps-component-name> further in the document are listed below:

Please refer to the OOM documentation on how to install and deploy ONAP.

Installing or Upgrading CPS Components

The assumption is you have cloned the charts from the OOM repository into a local directory.

Step 1 Go to the cps charts and edit properties in values.yaml files to make any changes to particular cps component if required.

cd oom/kubernetes/cps/components/<cps-component-name>

Step 2 Build the charts

cd oom/kubernetes
make SKIP_LINT=TRUE cps

Note

SKIP_LINT is only to reduce the “make” time

Step 3 Undeploying already deployed cps components

After undeploying cps components, keep monitoring the cps pods until they go away.

helm del --purge <my-helm-release>-<cps-component-name>
kubectl get pods -n <namespace> | grep <cps-component-name>

Step 4 Make sure there is no orphan database persistent volume or claim.

First, find if there is an orphan database PV or PVC with the following commands:

Note

This step does not apply to ncmp-dmi-plugin.

kubectl get pvc -n <namespace> | grep <cps-component-name>
kubectl get pv -n <namespace> | grep <cps-component-name>

If there are any orphan resources, delete them with

kubectl delete pvc <orphan-cps-core-pvc-name>
kubectl delete pv <orphan-cps-core-pv-name>

Step 5 Delete NFS persisted data for CPS components

Connect to the machine where the file system is persisted and then execute the below command

rm -fr /dockerdata-nfs/<my-helm-release>/<cps-component-name>

Step 6 Re-Deploy cps pods

After deploying cps, keep monitoring the cps pods until they come up.

helm deploy <my-helm-release> local/cps --namespace <namespace>
kubectl get pods -n <namespace> | grep <cps-component-name>

Restarting a faulty component

Each cps component can be restarted independently by issuing the following command:

kubectl delete pod <cps-component-pod-name> -n <namespace>

Credentials Retrieval

Application and database credentials are kept in Kubernetes secrets. They are defined as external secrets in the values.yaml file to be used across different components as :

Below are the list of secrets for different cps components.

Component

Secret type

Secret Name

cps-core

Database authentication

<my-helm-release>-cps-core-pg-user-creds

cps-core

Rest API Authentication

<my-helm-release>-cps-core-app-user-creds

cps-temporal

Rest API Authentication

<my-helm-release>-cps-temporal-app-user-creds

cps-temporal

Database authentication

<my-helm-release>-cps-temporal-pg-user-creds

ncmp-dmi-plugin

Rest API Authentication

<my-helm-release>-cps-dmi-plugin-user-creds

ncmp-dmi-plugin

SDNC authentication

<my-helm-release>-ncmp-dmi-plugin-sdnc-creds

The credential values from these secrets are configured in running container as environment variables. Eg: cps core deployment.yaml

If no specific passwords are provided to the chart as override values for deployment, then passwords are automatically generated when deploying the Helm release. Below command can be used to retrieve application property credentials

kubectl get secret <my-helm-release>-<secret-name> -n <namespace> -o json | jq '.data | map_values(@base64d)'

Note

base64d works only with jq version 1.6 or above.

CPS Core Pods

To get a listing of the cps-core Pods, run the following command:

kubectl get pods -n <namespace> | grep cps-core

dev-cps-core-ccd4cc956-r98pv                          1/1     Running            0          24h
dev-cps-core-postgres-primary-f7766d46c-s9d5b         1/1     Running            0          24h
dev-cps-core-postgres-replica-84659d68f9-6qnt4        1/1     Running            0          24h

Additional Cps-Core Customizations

The following table lists some properties that can be specified as Helm chart values to configure the application to be deployed. This list is not exhaustive.

Property

Description

Default Value

config.appUserName

User name used by cps-core service to configure the authentication for REST API it exposes.

This is the user name to be used by cps-core REST clients to authenticate themselves.

cpsuser

config.appUserPassword

Password used by cps-core service to configure the authentication for REST API it exposes.

This is the password to be used by CPS Temporal REST clients to authenticate themselves.

If not defined, the password is generated when deploying the application.

See also Credentials Retrieval.

Not defined

config.dmiPluginUserName

User name used by cps-core to authenticate themselves for using ncmp-dmi-plugin service.

dmiuser

config.dmiPluginUserPassword

Internal password used by cps-core to connect to ncmp-dmi-plugin service.

If not defined, the password is generated when deploying the application.

See also Credentials Retrieval.

Not defined

postgres.config.pgUserName

Internal user name used by cps-core to connect to its own database.

cps

postgres.config.pgUserPassword

Internal password used by cps-core to connect to its own database.

If not defined, the password is generated when deploying the application.

See also Credentials Retrieval.

Not defined

postgres.config.pgDatabase

Database name used by cps-core

cpsdb

logging.level

Logging level set in cps-core

info

config.eventPublisher. spring.kafka.bootstrap-servers

Kafka hostname and port

message-router-kafka:9092

config.eventPublisher. spring.kafka.consumer.client-id

Kafka consumer client id

cps-core

config.publisher. spring.kafka.security.protocol

Kafka security protocol. Some possible values are:

  • PLAINTEXT

  • SASL_PLAINTEXT, for authentication

  • SASL_SSL, for authentication and encryption

PLAINTEXT

config.publisher. spring.kafka.properties. sasl.mechanism

Kafka security SASL mechanism. Required for SASL_PLAINTEXT and SASL_SSL protocols. Some possible values are:

  • PLAIN, for PLAINTEXT

  • SCRAM-SHA-512, for SSL

Not defined

config.publisher. spring.kafka.properties. sasl.jaas.config

Kafka security SASL JAAS configuration. Required for SASL_PLAINTEXT and SASL_SSL protocols. Some possible values are:

  • org.apache.kafka.common.security.plain.PlainLoginModule required username="..." password="...";, for PLAINTEXT

  • org.apache.kafka.common.security.scram.ScramLoginModule required username="..." password="...";, for SSL

Not defined

config.publisher. spring.kafka.ssl.trust-store-type

Kafka security SASL SSL store type. Required for SASL_SSL protocol. Some possible values are:

  • JKS

Not defined

config.publisher. spring.kafka.ssl.trust-store-location

Kafka security SASL SSL store file location. Required for SASL_SSL protocol.

Not defined

config.publisher. spring.kafka.ssl.trust-store-password

Kafka security SASL SSL store password. Required for SASL_SSL protocol.

Not defined

config.publisher. spring.kafka.properties. ssl.endpoint.identification.algorithm

Kafka security SASL SSL broker hostname identification verification. Required for SASL_SSL protocol. Possible value is:

  • "", empty string to disable

Not defined

config.additional. notification.data-updated.topic

Kafka topic to publish to cps-temporal

cps.data-updated-events

config.additional. notification.data-updated.enabled

If notification from cps-core to cps-temporal is enabled or not. If this is set to false, then the config.publisher properties could be skipped.

true

config.additional. notification.data-updated.filters. enabled-dataspaces

Dataspaces to be enabled for publishing events to cps-temporal

config.additional. notification.async.enabled

If notifications should be processed in synchronous or asynchronous manner

false

config.additional. notification.async.executor. core-pool-size

Core pool size in asynchronous execution of notification.

2

config.additional. notification.async.executor. max-pool-size

Max pool size in asynchronous execution of notification.

1

config.additional. notification.async.executor. queue-capacity

Queue Capacity in asynchronous execution of notification.

500

config.additional. notification.async.executor. wait-for-tasks-to-complete-on-shutdown

If the executor should wait for the tasks to be completed on shutdown

true

config.additional. notification.async.executor. thread-name-prefix

Prefix to be added to the thread name in asynchronous execution of notifications.

async_

CPS-Core Docker Installation

CPS-Core can also be installed in a docker environment. docker-compose is included in the repo to start all the relevant services. The instructions are covered in the README.

CPS Release Notes

Version: 3.0.1

CPS Project

Docker images

onap/cps-and-ncmp:3.0.1

Release designation

3.0.1 Jakarta

Release date

2022 April 28

Bug Fixes
  • CPS-961 Updated ANTLR compiler version to 4.9.2 to be compatible with runtime version

Version: 3.0.0

Release Data

CPS Project

Docker images

onap/cps-and-ncmp:3.0.0

Release designation

3.0.0 Jakarta

Release date

2022 March 15

Features
  • CPS-559 Define response objects (schemas) in cps-ncmp

  • CPS-636 Update operation for datastore pass through running

  • CPS-638 Delete operation for datastore pass through running

  • CPS-677 Support ‘public’ Cm Handle Properties

  • CPS-741 Re sync after removing cm handles

  • CPS-777 Ensure all DMI operations use POST method

  • CPS-780 Add examples for parameters, request and response in openapi yaml for cps-core

  • CPS-789 CPS Data Updated Event Schema V2 to support delete operation

  • CPS-791 CPS-Core sends delete notification event

  • CPS-817 Create Endpoint For Get Cm Handles (incl. public properties) By Name

  • CPS-837 Add Remove and Update properties (DMI and Public) as part of CM Handle Registration update

Bug Fixes
  • CPS-762 Query cm handles for module names returns incorrect cm handle identifiers

  • CPS-788 Yang Resource formatting is incorrect

  • CPS-783 Remove cm handle does not completely remove all cm handle information

  • CPS-841 Upgrade log4j to 2.17.1 as recommended by ONAP SECCOM

  • CPS-856 Retry mechanism not working for concurrent CmHandle registration

  • CPS-867 Database port made configurable through env variable DB_PORT

  • CPS-886 Fragment handling decreasing performance for large number of cmHandles

  • CPS-887 Increase performance of cmHandle registration for large number of schema sets in DB

  • CPS-892 Fixed the response code during CM-Handle Registration from 201 CREATED to 204 NO_CONTENT

  • CPS-893 NCMP Java API depends on NCM-Rest-API (cyclic) through json properties on Java API

Known Limitations, Issues and Workarounds

System Limitations

Null can no longer be passed within the dmi plugin service names when registering a cm handle, as part of CPS-837 null is now used to indicate if a property should be removed as part of cm handle registration.

Known Vulnerabilities

None

Workarounds

Instead of passing null as a value within the dmi plugin service names, remove them from the request completely, or pass an empty string as the value if you do not want to include names for these values.

Security Notes

Fixed Security Issues

None

Known Security Issues

None

Version: 2.0.4

Release Data

CPS Project

Docker images

onap/cps-and-ncmp:2.0.4

Release designation

2.0.4 Istanbul

Release date

2022 Feb 09

Bug Fixes
  • CPS-879 Fix docker compose for csit test.

  • CPS-873 Fix intermittent circular dependency error when the application starts.

Version: 2.0.3

Release Data

CPS Project

Docker images

onap/cps-and-ncmp:2.0.3

Release designation

2.0.3 Istanbul

Release date

2022-07-01

Bug Fixes
  • CPS-841 Update log4j version to 2.17.1 due to security vulnerability

Version: 2.0.2

Release Data

CPS Project

Docker images

onap/cps-and-ncmp:2.0.2

Release designation

2.0.2 Istanbul

Release date

2021-16-12

Bug Fixes
  • CPS-820 Update log4j version due to security vulnerability

Version: 2.0.1

Release Data

CPS Project

Docker images

onap/cps-and-ncmp:2.0.1

Release designation

2.0.1 Istanbul

Release date

2021-14-10

Bug Fixes
  • CPS-594 SQL ConstraintViolationException when updating the list node element using PATCH List node API

  • CPS-653 cmHandleProperties not supported by dmi in fetch modules

  • CPS-673 Improvement and cleanup for CPS Core charts

  • CPS-691 NCMP no master index label on index documentation page

Known Limitations, Issues and Workarounds

System Limitations

Limitations to the amount of child nodes that can be added to the fix above. The current limit is 3.

Known Vulnerabilities

  • CPS-725 fix sample docker compose of cps/ncmp and onap dmi plugin

Workarounds

Add recursive method to save list node data to loop through all corresponding child nodes.

Security Notes

Fixed Security Issues

  • CPS-581 Remove security vulnerabilities

Known Security Issues

None

Version: 2.0.0

Abstract

This document provides the release notes for Istanbul release.

Release Data

CPS Project

Docker images

onap/cps-and-ncmp:2.0.0

Release designation

2.0.0 Istanbul

Release date

2021-14-09

Features
  • Register DMI-Plugins with NCMP for CM Handle registrations.

  • Update, Create and Remove CM Handles.

  • Add support for retrieving and writing CM Handle data through NCMP datastores.

  • Automatic retrieval and caching of model information for CM Handles within NCMP.

Deliverables

Software Deliverables

Repository

SubModules

Version & Docker Image (if applicable)

cps

onap/cps-and-ncmp-proxy:2.0.0

Bug Fixes
  • CPS-310 Data schema migration from Honolulu to Istanbul is failing

  • CPS-316 Xpath cannot be created for augmentation data node

  • CPS-336 Ends-with functionality in cpsPath does not conform with standard xPath behavior

  • CPS-345 Leaf String value comparison matches mix of single and double quotes

  • CPS-357 cps-review-verification-maven-master Jenkins job is failing when running csit test

  • CPS-367 Get descendent does not support xpaths that end in list values

  • CPS-377 Init ran model validation is failing error details are not provided

  • CPS-422 REST 404 response returned instead of 400 for POST/PUT/PATCH request types

  • CPS-450 Datanode query using full path to node causes NPE

  • CPS-451 cps-ran-schema-model@2021-01-28.yang missing root container

  • CPS-464 Request to update node leaves (patch) responds with Internal Server Error

  • CPS-465 Request to update node leaves (patch) responds with json parsing failure

  • CPS-466 Concurrent requests to create schema sets for the same yang model are not supported

  • CPS-479 Get Nodes API does not always return the object from the root

  • CPS-500 Special Character Limitations of cpsPath Queries

  • CPS-501 Put DataNode API has missing transaction and error handling for concurrency issues

  • CPS-524 Issue with CPSData API to add an item to an existing list node

  • CPS-560 Response from cps query using text() contains escape characters

  • CPS-566 Can’t access grandparent node through ancestor axis

  • CPS-573 /v1/ch/PNFDemo1/modules returning 401 unauthorised.

  • CPS-587 cps-ncmp-service NullpointerException when DmiPluginRegistration has no additionProperties

  • CPS-591 CPS-Core Leaf stored as integer is being returned from DB as float

  • CPS-601 CPS swagger-ui does not show NCMP endpoints

  • CPS-616 NCMP base path does not conform to agreed API URL

  • CPS-630 Incorrect information sent when same anchor is updated faster than notification service processes

  • CPS-635 Module Resource call does not include body

This document provides the release notes for Istanbul release.

Summary

Following CPS components are available with default ONAP/CPS installation.

  • Platform components

    • CPS (Helm charts)

  • Service components

    • CPS-NCMP

    • CPS-Temporal

    • DMI-Plugin

  • Additional resources that CPS utilizes deployed using ONAP common charts

    • Postgres Database

Below service components (mS) are available to be deployed on-demand.
  • CPS-TBDMT

Under OOM (Kubernetes) all CPS component containers are deployed as Kubernetes Pods/Deployments/Services into Kubernetes cluster.

Known Limitations, Issues and Workarounds

System Limitations

Limitations to the amount of child nodes that can be added to the fix above. The current limit is 3.

Known Vulnerabilities

  • CPS-594 SQL ConstraintViolationException when updating the list node element using PATCH List node API

  • CPS-653 cmHandleProperties not supported by dmi in fetch modules

  • CPS-673 Improvement and cleanup for CPS Core charts

Workarounds

Add recursive method to save list node data to loop through all corresponding child nodes.

Security Notes

Fixed Security Issues

  • CPS-249 Exception stack trace is exposed

Known Security Issues

  • CPS-581 Remove security vulnerabilities

Test Results
  • Integration tests

Version: 1.0.1

Release Data

CPS Project

Docker images

onap/cps-and-nf-proxy:1.0.1

Release designation

1.0.1 Honolulu

Release date

2021-04-09

Bug Fixes
  • CPS-706 Get moduleschema/yangresouce endpoint not working

  • CPS-276 Improve error reporting for invalid cpsPath on Queries

  • CPS-288 Move security configuration to the application module

  • CPS-290 Internal Server Error when creating the same data node twice

  • CPS-292 Detailed information is missing to explain why data is not compliant with the specified YANG model

  • CPS-300 Not able to create data instances for 2 different anchors using the same model

  • CPS-304 Use ONAP recommended base Java Docker image

  • CPS-308 Not able to upload yang models files greater than 1MB

Security Notes

Fixed Security Issues

  • CPS-249 Exception stack trace is exposed

Known Security Issues

Version: 1.0.0

Abstract

This document provides the release notes for Honolulu release.

Summary

Following CPS components are available with default ONAP/CPS installation.

  • Platform components

    • CPS (Helm charts)

  • Service components

    • CPS Core

  • Additional resources that CPS utilizes deployed using ONAP common charts

    • Postgres Database

Below service components (mS) are available to be deployed on-demand.
  • CPS-TBDMT

Under OOM (Kubernetes) all CPS component containers are deployed as Kubernetes Pods/Deployments/Services into Kubernetes cluster.

Release Data

CPS Project

Docker images

Refer Deliverable

Release designation

1.0.0 Honolulu

Release date

2021-03-11

Features

Configuration Persistence Service is a model driven persistence solution for data described by YANG models. CPS has been driven by the needs of the E2E Networking Slicing use case. It currently supports basic (rw) persistence and simple queries. It also provides MVP support for network data access using simulated data.

Deliverables

Software Deliverables

Repository

SubModules

Version & Docker Image (if applicable)

cps

onap/cps-and-nf-proxy:1.0.0

Known Limitations, Issues and Workarounds
  • CPS-249 Exception stack trace is exposed

  • CPS-264 Unique timestamp is missing when tagging docker images.

  • Methods exposed on API which are yet not implemented : deleteAnchor, getNodesByDataspace & deleteDataspace.

  • CPS-465 & CPS-464 Update data node leaves API does not support updating a list element with compound keys.

System Limitations

None

Known Vulnerabilities

None

Workarounds

Documented under corresponding jira if applicable.

Security Notes

Fixed Security Issues

  • CPS-167 -Update CPS dependencies as Required for Honolulu release
    • Upgrade org.onap.oparent to 3.2.0

    • Upgrade spring.boot to 2.3.8.RELEASE

    • Upgrade yangtools to 5.0.7

Known Security Issues

  • Weak Crytography using md5

  • Risk seen in Zip file expansion

Known Vulnerabilities in Used Modules

None

CPS code has been formally scanned during build time using NexusIQ and all Critical vulnerabilities have been addressed, items that remain open have been assessed for risk and determined to be false positive.

Test Results
References

For more information on the ONAP Honolulu release, please see:

  1. ONAP Home Page

  2. ONAP Documentation

  3. ONAP Release Downloads

  4. ONAP Wiki Page

Quick Links:

DMI-Plugin

CPS Temporal