OOM Configuration Management

OOM Configuration Management

Introduction

ONAP is a large system composed of many components - each of which are complex systems in themselves - that needs to be deployed in a number of different ways.  For example, within a single operator's network there may be R&D deployments under active development, pre-production versions undergoing system testing and production systems that are operating live networks.  Each of these deployments will differ in significant ways, such as the version of the software images deployed.  In addition, there may be a number of application specific configuration differences, such as operating system environment variables.  The following describes how the Helm configuration management system is used within the OOM project to manage both ONAP infrastructure configuration as well as ONAP components configuration.

ONAP Infrastructure Configuration

One of the artifacts that OOM/kubernetes uses to deploy ONAP components is the deployment specification, yet another yaml file.  Within these deployment specs are a number of parameters as shown in the following mariadb example:

deployment specification example
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: mariadb spec: <...> template: <...> spec: hostname: mariadb containers: - args: image: nexus3.onap.org:10001/mariadb:10.1.11 name: "mariadb" env: - name: MYSQL_ROOT_PASSWORD value: password - name: MARIADB_MAJOR value: "10.1" <...> imagePullSecrets: - name: onap-docker-registry-key

Note that within the deployment specification, one of the container arguments is the key/value pair image: nexus3.onap.org:10001/mariadb:10.1.11 which specifies the version of the mariadb software to deploy.  Although the deployment specifications greatly simplify deployment, maintenance of the deployment specifications themselves become problematic as software versions change over time or as different versions are required for different deployments.  For example, if the R&D team needs to deploy a newer version of mariadb than what is currently used in the production environment, they would need to clone the deployment specification and change this value.  Fortunately, this problem has been solved with the templating capabilities of Helm.   

The following example shows how the deployment specifications are modified to incorporate Helm templates such that key/value pairs can be defined outside of the deployment specifications and passed during instantiation of the component. 

deployment template example
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: mariadb namespace: "{{ .Values.nsPrefix }}-mso" spec: <...> template: <...> spec: hostname: mariadb containers: - args: image: {{ .Values.image.mariadb }} imagePullPolicy: {{ .Values.pullPolicy }} name: "mariadb" env: - name: MYSQL_ROOT_PASSWORD value: password - name: MARIADB_MAJOR value: "10.1" <...> imagePullSecrets: - name: "{{ .Values.nsPrefix }}-docker-registry-key"

This version of the deployment specification has gone through the process of templating values that are likely to change between deployments. Note that the image is now specified as: image: {{ .Values.image.mariadb }} instead of a string used previously.  During the deployment phase, Helm (actually the Helm sub-component Tiller) substitutes the {{ .. }} entries with a variable defined in a values.yaml file.  The content of this file is as follows:

values.yaml
nsPrefix: onap pullPolicy: IfNotPresent image: readiness: oomk8s/readiness-check:1.0.0 mso: nexus3.onap.org:10001/openecomp/mso:1.0-STAGING-latest mariadb: nexus3.onap.org:10001/mariadb:10.1.11

Within the values.yaml file there is an image section with the key/value pair mariadb: nexus3.onap.org:10001/mariadb:10.1.11 which is the same value used in the non-templated version.  Once all of the substitutions are complete, the resulting deployment specification ready to be used by kubernetes.

Also note that in this example, the namespace key/value pair is specified in the values.yaml file.  This key/value pair will be global across the entire ONAP deployment and is therefore a prime example of where configuration hierarchy can be very useful.

When creating a deployment template consider the use of default values if appropriate.  Helm templating has built in support for DEFAULT values, here is an example:

Helm Template Defaults
imagePullSecrets: - name: "{{ .Values.nsPrefix | default "onap" }}-docker-registry-key"

The pipeline operator ("|") used here hints at that power of Helm templates in that much like an operating system command line the pipeline operator allow over 60 Helm functions to be embedded directly into the template (note that the Helm template language is a superset of the Go template language).  These functions include simple string operations like upper and more complex flow control operations like if/else.

ONAP Application Configuration

<..text..>





Configuration Parameters Mapping

yellow cells are "in-progress" being defined

yellow cells are "in-progress" being defined

Component

Project

Repo

Container

Configuration file (full path)

Parameter name

Environment Variable

Kubernetes default value

Default Parameter value

Component

Project

Repo

Container

Configuration file (full path)

Parameter name

Environment Variable

Kubernetes default value

Default Parameter value

APPC





appc-controller-container

/opt/openecomp/appc/data/properties/appc.properties

appc.ClosedLoop1607.poolMembers

_opt_openecomp_appc_data_properties_appc_properties_key_appc_ClosedLoop1607_poolMembers

dmaap.onap-message-router:3904 

10.0.11.1:3904











appc.provider.vfodl.url

_opt_openecomp_appc_data_properties_appc_properties_key_appc_provider_vfodl_url

http://admin:Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U@sdnhost.onap-appc:8282/restconf/config/network-topology:network-topology/topology/topology-netconf/node/NODE_NAME/yang-ext:mount/sample-plugin:sample-plugin/pg-streams/

http://admin:Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U@10.0.2.1:8282/restconf/config/network-topology:network-topology/topology/topology-netconf/node/NODE_NAME/yang-ext:mount/sample-plugin:sample-plugin/pg-streams/











dmaap.poolMembers

APPC_PROVIDER_VFODL_URL

dmaap.onap-message-router:3904 

10.0.11.1:3904











appc.ClosedLoop.poolMembers

APPC_CLOSEDLOOP_POOLMEMBERS

dmaap.onap-message-router:3904  

10.0.11.1:3904











appc.LCM.poolMembers

APPC_LCM_POOLMEMBERS

dmaap.onap-message-router:3904  

10.0.11.1:3904











poolMembers

POOLMEMBERS


dmaap.onap-message-router:3904  

10.0.11.1:3904











event.pool.members

EVENT_POOL_MEMBERS

dmaap.onap-message-router:3904  

10.0.11.1:3904











test.ip

TEST_IP

dmaap.onap-message-router00 

10.0.11.100











appc.asdc.host

APPC_ASDC_HOST

sdc-be.onap-sdc 

10.0.3.1:8443











appc.asdc.env

APPC_ASDC_ENV

APPC-ASDC-ENV

SUCCESS









/opt/openecomp/sdnc/data/properties/aaiclient.properties

org.openecomp.sdnc.sli.aai.uri

_opt_openecomp_sdnc_data_properties_aaiclient_properties_key_org_openecomp_sdnc_sli_aai_uri

https://aai-service.onap-aai:8443

https://aai.api.simpledemo.openecomp.org:8443











org.openecomp.sdnc.sli.aai.notify.selflink.fqdn

ORG_OPENECOMP_SDNC_SLI_AAI_NOTIFY_SELFLINK_FQDN

https://aai-service.onap-aai:8443/restconf/config/L3SDN-API:services/layer3-service-list/{service-instance-id}

https://aai.api.simpledemo.openecomp.org:8443/restconf/config/L3SDN-API:services/layer3-service-list/{service-instance-id}











org.openecomp.sdnc.sli.aai.notify.selflink.avpn

ORG_OPENECOMP_SDNC_SLI_AAI_NOTIFY_SELFLINK_AVPN

https://aai-service.onap-aai:8543/restconf/config/L3AVPN-EVC-API:services/service-list/{service-instance-id}/service-data/avpn-logicalchannel-information

https://aai.api.simpledemo.openecomp.org:8543/restconf/config/L3AVPN-EVC-API:services/service-list/{service-instance-id}/service-data/avpn-logicalchannel-information

APPC





appc-dgbuilder-container

/opt/openecomp/sdnc/dgbuilder/svclogic/svclogic.properties

org.openecomp.sdnc.sli.jdbc.url

_opt_openecomp_sdnc_dgbuilder_svclogic_svclogic_properties_key_org.openecomp.sdnc.sli.jdbc.url

jdbc:mysql://dbhost:3306/sdnctl

jdbc:mysql://sdnctldb01:3306/sdnctl











org.openecomp.sdnc.sli.dbtype

_opt_openecomp_sdnc_dgbuilder_svclogic_svclogic_properties_key_org_openecomp_sdnc_sli_dbtype

dblib

note: a value of jdbc will enable all _JDBC_ properties above

dblib







appc-dbhost











SDNC





sdnc-portal-container

/opt/openecomp/sdnc/admportal/config/admportal.json

/opt/openecomp/sdnc/data/properties/admportal.json

odlHost

ODLHOST

sdnhost.onap-sdnc

sdnhost











odlConexusHost

ODLCONEXUSHOST

sdnhost.onap-sdnc

sdnhost







sdnc-portal-container

sdnc-controller-container (sdnc)

/opt/openecomp/sdnc/data/properties/aaiclient.properties

org.openecomp.sdnc.sli.aai.uri

ORG_OPENECOMP_SDNC_SLI_AAI_URI

https://aai-service.onap-aai:8443

https://aai.api.simpledemo.openecomp.org:8443











org.openecomp.sdnc.sli.aai.notify.selflink.fqdn

ORG_OPENECOMP_SDNC_SLI_AAI_NOTIFY_SELFLINK_FQDN

https://aai-service.onap-aai:8443/restconf/config/L3SDN-API:services/layer3-service-list/{service-instance-id}

https://aai.api.simpledemo.openecomp.org:8443/restconf/config/L3SDN-API:services/layer3-service-list/{service-instance-id}











org.openecomp.sdnc.sli.aai.notify.selflink.avpn

ORG_OPENECOMP_SDNC_SLI_AAI_NOTIFY_SELFLINK_AVPN

https://aai-service.onap-aai:8543/restconf/config/L3AVPN-EVC-API:services/service-list/{service-instance-id}/service-data/avpn-logicalchannel-information

https://aai.api.simpledemo.openecomp.org:8543/restconf/config/L3AVPN-EVC-API:services/service-list/{service-instance-id}/service-data/avpn-logicalchannel-information

MSO





mso

/etc/mso/config.d/mso.apihandler-infra.properties

bpelURL

BPELURL

http://mso.onap-mso:8080

http://mso:8080











camundaURL

CAMUNDAURL

http://mso.onap-mso:8080

http://mso:8080









/etc/mso/config.d/mso.asdc.json

asdc-connections/asdc-controller1/user

ASDC_CONNECTIONS_ASDC_CONTROLLER1_USER

mso

user











asdc-connections/asdc-controller1/asdcAddress



ASDC_CONNECTIONS_ASDC_CONTROLLER1_ASDCADDRESS

sdc-be.onap-sdc:8443

asdc_hostname1:8443











asdc-connections/asdc-controller1/consumerGroup



ASDC_CONNECTIONS_ASDC_CONTROLLER1_CONSUMERGROUP

sdc-OpenSource-Env1-mso-docker9

mso-mso-docker4











asdc-connections/asdc-controller1/consumerId



ASDC_CONNECTIONS_ASDC_CONTROLLER1_CONSUMERID

sdc-COpenSource-Env11-mso-docker9

mso-mso-docker4











asdc-connections/asdc-controller1/environmentName

ASDC_CONNECTIONS_ASDC_CONTROLLER1_ENVIRONMENTNAME

AUTO

PROD