CPS-1393 Define and Onboard YANG model for Subscription Events
References
Related JIRA: CPS-1496 Model Subscription status
Assumptions
Issues & Decisions
Issue | Notes | Decisions | ||
---|---|---|---|---|
1 | 1 | What dataspace and anchor to use? |
| Dataspace: NCMP-Admin Anchor: AVC-Subscriptions |
2 | How do we load the data ( not using cps-core / not using Liquibase )? | Options
| Need to discuss with stakeholders re. Priority and Cost
Dec 13, 2022 Tony: Preference over native SQL in an init container | |
3 | 3 | Predicate details are unclear at the moment. Which component(s) processes the predicates?! Device, DMI-Plugin and or NCMP |
Predicate Example"datastore": “passthrough-operational", (O)
"datastore-xpath-filter" : "//_3gpp-nr-nrm-nbdufunction:GNBDUFunction/
_3gpp-nr-nrm-nrcelldu:NRCellDU/ | //_3gpp-nr-nrm-gnbcuupfunction:GNBCUUPFunction// |
//_3gpp-nr-nrm-gnbcucpfunction:GNBCUCPFunction/_3gpp-nr-nrm-nrcelldu:NRCellCU// |
//_3gpp-nr-nrm-nrsectorcarrier:NRSectorCarrier//”
| Contact @kieran mccarthy to clarify this (Tony assumed predicates were NOT for NCMP)
Dec 15, 2022 @kieran mccarthy confirmed that predicates is not to be included in the data infromation to be stored, hence not part of the YANG model to be defined. |
Background
NCMP wil need to store which subscriptions are current for each cm-handle
Dataspace: NCMP-Admin (existing)
Anchor: AVC-Subscriptions (new)
Top level list Container?! (if need wrap in a top-level container)
CONTAINER: subscription-registry
LIST: subscription[@clientId=AppB and @name=mySubscription]
LEAF: clientId (leaf)
LEAF: name
LEAF: topic
LEAF: isTagged
YANG model
The following yang model will be used to store the payload information of subscription data
Previous Update: Feb 16, 2023
Latest Update: Mar 13, 2023
Subscription YANG model
module subscription {
yang-version 1.1;
namespace "org:onap:ncmp:subscription";
prefix subs;
revision "2022-10-12" {
description
"NCMP subscription model";
}
container subscription-registry {
list subscription {
key "clientID clientName";
leaf clientID {
type string;
}
leaf clientName {
type string;
}
leaf topic {
type string;
}
leaf isTagged {
type boolean;
}
container predicates {
leaf-list targets {
type string;
}
leaf datastore {
type string;
}
}
list respondedCmHandle {
key "cmHandleId status";
leaf cmHandleId {
type string;
}
leaf status {
type string;
}
}
}
}
}
Note:
leaf-list dmi-service-names : added as part of CPS-1496: Model Subscription Status Closed
Onboarding via docker container
Starting CPS requires running the project via a docker-compose file wherein the following services/containers are set up:
postgres database
cps-and-ncmp
zookeeper
kafka
ncmp-dmi-plugin
Adding a new container 'init-db' to run a script file that calls psql (postgres) and curl commands to upload the new YANG model:
docker-compose configuration of 'init-db' service
init-db:
build: ./initfile
environment:
POSTGRES_USER: ${DB_USERNAME:-cps}
POSTGRES_PASSWORD: ${DB_PASSWORD:-cps}
volumes:
- ./initfile:/docker-entrypoint-initdb.d/
- ./model:/model/
depends_on:
db:
condition: service_healthy
cps-and-ncmp:
condition: service_started
build - creates from the Dockerfile created which is based on postgres and added curl
environment - mandatory config values for postgres image; added same config values as the main Postgres DB used by cps
volumes : folders located inside cps project's docker-compose folder
-initfile: contains the bash script and Dockerfile; mounted on ENTRYPOINT
-POC: 'initprojecct.sh'
line 3: psql returns 't' for true
line 6: while loop used to re try uploading the model whenever the dataspace and anchor is ready
line 8: sleep for number of seconds to allow the liquibase set up of the database via cps-and-ncmp container
line 10-11: postgres commands to confirm that the needed dataspace and anchor exists (for this POC case subscription model requires the 'NCMP-Admin' dataspace and 'ncmp-dmi-registry' anchor)
line 17: if condition specifies to only upload the model if dataspace and anchor exists
line 21: command to get the IP address of 'cps-and-ncmp' docker container via ping's output manipulation and store in a variable; this variable is used in call of curl
line 23-25: curl 'POST' commands to create dataspace, anchor and upload schemaset
- model: contains the subscription model
depends_on:
-db: healthcheck is added on the db container/service which leaves seconds after the database has started
-cps-and-ncmp: service should be started before init-db container is brought up
Service/Container 'init-db' is built from a customised image supported by a Dockerfile containing the following:
Image from Dockerfile is based from postgres image and added 'curl'
POC: init-db container log output
Onboarding via JAVA / Spring boot