There are two configuration files for A1 Policy Management Service, config/application_configuration.json and config/application.yaml
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.

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:

  • server; configuration for the WEB server
    • used port for HTTP/HTTPS, this is however not the port numbers visible outside the container
    • SSL parameters for setting up using of key store and trust store databases.
  • webclient; configuration parameters for a web client used by the component
    • SSL parameters for setting up using of key store and trust store databases.
    • Usage of HTTP Proxy; if configured, the proxy will be used for accessing the near-RT-RICs
  • logging; setting of of which information that is logged.
  • 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.

Sample: application.yaml
#
# ============LICENSE_START=======================================================
# ONAP : ccsdk oran
# ================================================================================
# Copyright (C) 2020 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
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
# ============LICENSE_END=========================================================
#
spring:
  profiles:
    active: prod
  main:
    allow-bean-definition-overriding: true
  aop:
    auto: false
management:
  endpoints:
    web:
      exposure:
        # Enabling of springboot actuator features. See springboot documentation.
        include: "loggers,logfile,health,info,metrics,threaddump,heapdump"

logging:
  # Configuration of logging
  level:
    ROOT: ERROR
    org.springframework: ERROR
    org.springframework.data: ERROR
    org.springframework.web.reactive.function.client.ExchangeFunctions: ERROR
    org.onap.ccsdk.oran.a1policymanagementservice: INFO
    # org.onap.ccsdk.oran.a1policymanagementservice.tasks: TRACE  
  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
   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
app:
  # Location of the component configuration file. The file will only be used if the Consul database is not used;
  # configuration from the Consul will override the 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
  vardata-directory: /var/policy-management-service
  config-file-schema-path:

See also Istanbul - Configuration of Certs

Dynamic configuration - Settings that can be changed at runtime (application_configuration.json or REST or Consul 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 can be accessed directly from this 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.

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.

Sample JSON Configuration

A sample configuration is included below.

application_configuration.json
{
  "description": "Application configuration",
  "config": {    
    "controller": [
      {
        "name": "controller1",
        "baseUrl": "http://sdnc_controller:8181",
        "userName": "admin",
        "password": "Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U"
      }
    ],
    "ric": [
      {
        "name": "ric1",
        "baseUrl": "http://ric1:8085/", 
        "managedElementIds": [
        ]
      },
      {
        "name": "ric2",
        "baseUrl": "http://ric2:8085/",       
        "managedElementIds": [
          "kista_3",
          "kista_4"
        ]
      },
       {
        "name": "ric3",
        "baseUrl": "http://ric3:8085/",
        "controller": "controller1", 
        "managedElementIds": [
          "kista_5",
          "kista_6"
        ]
      },
       {
        "name": "ric4",
        "baseUrl": "http://ric4:8085/",
        "controller": "controller1", 
        "managedElementIds": [
          "kista_7",
          "kista_8",
          "kista_9",
          "kista_10",
          "kista_11"
         ]
      }
    ]
  }
}

JSON Schema for the application configuration

The configuration must comply to the following JSON schema. There are several tools on internet where it is possible to validate JSON against a schema. 

application_configuration_schema.json
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "config": {
      "type": "object",
      "properties": {
        "//description": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "controller": {
          "type": "array",
          "items": [
            {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "baseUrl": {
                  "type": "string"
                },
                "userName": {
                  "type": "string"
                },
                "password": {
                  "type": "string"
                }
              },
              "required": [
                "name",
                "baseUrl",
                "userName",
                "password"
              ],
              "additionalProperties": false
            }
          ]
        },
        "ric": {
          "type": "array",
          "items": [
            {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "baseUrl": {
                  "type": "string"
                },
                "controller": {
                  "type": "string"
                },
                "managedElementIds": {
                  "type": "array",
                  "items": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "string"
                    }
                  ]
                }
              },
              "required": [
                "name",
                "baseUrl",
                "managedElementIds"
              ],
              "additionalProperties": false
            }
          ]
        },
        "streams_publishes": {
          "type": "object",
          "properties": {
            "dmaap_publisher": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "dmaap_info": {
                  "type": "object",
                  "properties": {
                    "topic_url": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "topic_url"
                  ]
                }
              },
              "required": [
                "type",
                "dmaap_info"
              ]
            }
          },
          "required": [
            "dmaap_publisher"
          ]
        },
        "streams_subscribes": {
          "type": "object",
          "properties": {
            "dmaap_subscriber": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "dmaap_info": {
                  "type": "object",
                  "properties": {
                    "topic_url": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "topic_url"
                  ]
                }
              },
              "required": [
                "type",
                "dmaap_info"
              ]
            }
          },
          "required": [
            "dmaap_subscriber"
          ]
        }
      },
      "required": [
        "ric"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "config"
  ]
}

Using CBS/Consul database for dynamic configuration

The access of CBS is setup by means of environment variables. There is currently no support for setting these at on boarding.

The following variables are required by the CBS:

  • CONSUL_HOST
  • CONSUL_PORT
  • CONFIG_BINDING_SERVICE
  • SERVICE_NAME


  • No labels