From 6ec2495b9fd40149e176673885ead3364cdb3184 Mon Sep 17 00:00:00 2001 From: Krzysztof Kuzmicki Date: Wed, 14 Apr 2021 14:55:11 +0200 Subject: [PATCH] [INTEGRATION] Add NF simulator documentation in read the docs Add NF simulator documentation in read the docs Issue-ID: INT-1869 Signed-off-by: Krzysztof Kuzmicki Change-Id: I86f268e89c262264aedf7ddf164ec2e16c0ec630 --- docs/files/csv/simulators.csv | 3 +- docs/files/simulators/NF-Simulator.png | Bin 0 -> 49174 bytes docs/simulators/nf_simulator.rst | 142 +++++++++++++++++++++++++++++++++ docs/simulators/ns_simulator.rst | 28 ------- 4 files changed, 143 insertions(+), 30 deletions(-) create mode 100644 docs/files/simulators/NF-Simulator.png create mode 100644 docs/simulators/nf_simulator.rst delete mode 100644 docs/simulators/ns_simulator.rst diff --git a/docs/files/csv/simulators.csv b/docs/files/csv/simulators.csv index a2ea2ab94..69e6b57f8 100644 --- a/docs/files/csv/simulators.csv +++ b/docs/files/csv/simulators.csv @@ -1,7 +1,6 @@ Name;Description;Link;Contacts -NS Simulator;Evolution of the pnf simulator, the Network service simulator;:ref:`official doc `;K.Kuzmicki +NF Simulator;Evolution of the pnf simulator, the Network service simulator;:ref:`official doc `;K.Kuzmicki A1 Policy Enforcement Simulator;Simulator that supports the A1-P OSC_2.1.0 interface and also provides internal API to manage the RAN elements (Cells, Ues) and allows to customize and send VES Events;`official readme `__;Krystian Kędroń -PNF simulator;Core PNF simulator, Netconf simulator, simulator-cli;`official readme `__;K.Kuzmicki Mass PNF Simulator;Mimic the PNF for benchmark purposes;`official readme `__;Tamas Bakai Ran simulator;RAN-SIM is a Radio Access Network Simulator, it is used to simulate the various functionalities of an eNodeB;`official readme `__;Priyadharshini B DC simulator;Data Center simulator;`official readme `__;Xin Miao diff --git a/docs/files/simulators/NF-Simulator.png b/docs/files/simulators/NF-Simulator.png new file mode 100644 index 0000000000000000000000000000000000000000..ce914c5ca4b0ab9abff4096e239b22e8d2e3d7e6 GIT binary patch literal 49174 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 NrwmOE2*;fw{|CQ(+Qa|= literal 0 HcmV?d00001 diff --git a/docs/simulators/nf_simulator.rst b/docs/simulators/nf_simulator.rst new file mode 100644 index 000000000..f13b76961 --- /dev/null +++ b/docs/simulators/nf_simulator.rst @@ -0,0 +1,142 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 +International License. http://creativecommons.org/licenses/by/4.0 + +.. _nf_simulator: + +:orphan: + +NF Simulator +============ + +Description +----------- +An idea behind NF (Network Function) Simulator is to introduce simulator, which supports ORAN defined O1 interface (reporting of NF events to Service Management Orchestrators). +Within the use-case, it is expected, that an NF configuration change, happening due to multiple reasons (network mechanism triggered change - e.g. discovery of neighbours) is reported to the network management system, using ONAP`s VES REST events. +The simulator is expected to cover planned NF behaviour - receive the config change via a NetConf protocol and report that change (also potentially other related changes) to the network management system using ONAP`s VES event. + +|image1| + +**Figure 1. Architecture Overview** + +NF Simulator code is stored in https://github.com/onap/integration-simulators-nf-simulator and all it's sub repos are: + +* for VES Client - https://github.com/onap/integration-simulators-nf-simulator-ves-client +* for Netconf Server - https://github.com/onap/integration-simulators-nf-simulator-netconf-server +* for AVCN Manager - https://github.com/onap/integration-simulators-nf-simulator-avcn-manager +* for PM HTTPS Server - https://github.com/onap/integration-simulators-nf-simulator-pm-https-server + +For above components have been prepared: + +* docker images in ONAP Nexus: + + * VES Client image - nexus3.onap.org:10001/onap/org.onap.integration.nfsimulator.vesclient + * AVCN Manager image - nexus3.onap.org:10001/onap/org.onap.integration.nfsimulator.avcnmanager + * PM HTTPS Server image - nexus3.onap.org:10001/onap/org.onap.integration.nfsimulator.pmhttpsserver + * Netconf Server images - nexus3.onap.org:10001/onap/org.onap.integration.nfsimulator.netconfserver + +* example helm charts: + + * `Helm charts `_ + +**VES Client, Netconf Server and PM HTTPS Server can be used and deployed separately depending on needs.** + +Only AVCN Manger connects VES Client with Netconf Server in order to support O1 interface. + +1. VES Client: +-------------- + + Application that generates VES events on demand. + + **What does it do?** + + * Supports both basic auth and TLS CMPv2 method of authentication. + * Allows to turn on and turn off hostname, verification in SSL. + * Allows to send one-time event and periodic events, based on event templates. + * Exposes API to manage VES Client + * Provides template mechanism (Template is a draft event. Merging event with patch will result in valid VES event. + Template itself should be a correct VES event as well as valid json object. ) + * Patching - User is able to provide patch in request, which will be merged into template. + * Simulator supports corresponding keywords in templates: RandomInteger(start,end), RandomPrimitiveInteger(start,end), RandomInteger, + RandomString(length), RandomString, Timestamp, TimestampPrimitive, Increment + * In place variables support - Simulator supports dynamic keywords e.g. #dN to automatically substitute selected phrases in defined json schema. + * Logging - Every start of simulator will generate new logs that can be found in docker ves-client container. + * Swagger - Detailed view of simulator REST API is available via Swagger UI + * History - User is able to view events history. + + +2. Netconf Server: +------------------ + + This server uses sysrepo to simulate network configuration. + It is based on sysrepo-netopeer2 image. + + **What does it do?** + + Server allows to: + + * install custom configuration models on start up. + * change configuration of that modules on runtime. + * use TLS custom certificates + * configure change subscription for particular YANG modules (Netconf server image run python application on the startup.) + * manage netconf server using REST interface, with endpoints: + + * GET /healthcheck returns 200 "UP" if server is up and running + * POST /readiness return 200 "Ready" if server is ready, if not, returns 503 "Not Ready" + * POST /change_config/ changes configuration ad returns 202 "Accepted" + * GET /change_history returns 200 and change history as json + * GET /get_config/ returns 200 and current configuration + +3. AVCN Manager: +---------------- + + Manager that fetches changes of configuration from kafka and sends them to VES client. + + **What does it do?** + + The manager processes notifications from NETCONF server. It does this by being a subscriber of a Kafka topic that is fed + with NETCONF notifications. Incoming notifications are then processed and output of this processing is sent to VES client. + +4. PM HTTPS Server: +------------------- + + Server that is used in Bulk PM usecases over HTTPS + + **What does it do?** + + * Supports TLS (CMPv2) method of authentication (used during connection to Data File Collector) + * Allows to use custom certificates + * Exposes REST API in order to manage PM files stored in HTTPS server + + +Guides +====== + +User And Developer Guide +------------------------ +User guides: + +- `VES Client user guide. `_ +- `AVCN Manager user guide. `_ +- `PM HTTPS Server user guide. `_ +- `Netconf Server user guide. `_ +- `Netconf Notification Application user guide. `_ +- `NF Simulator CLI user guide `_ + +Jenkins builds: + +* `VES Client jenkins builds `_ +* `AVCN Manager jenkins builds `_ +* `PM HTTPS Server jenkins builds `_ +* `Netconf Server jenkins builds `_ + +NF Simulator CSIT test cases: + +* `Project integration-simulators-nf-simulator-netconf-server-master-verify-csit-testsuites `_ +* `Project integration-simulators-nf-simulator-netconf-server-master-csit-testsuites `_ + +NF Simulator sanity checks: + +* https://github.com/onap/integration-simulators-nf-simulator/tree/master/sanitycheck + +.. |image1| image:: ../files/simulators/NF-Simulator.png + :width: 10in \ No newline at end of file diff --git a/docs/simulators/ns_simulator.rst b/docs/simulators/ns_simulator.rst deleted file mode 100644 index f9f724e6c..000000000 --- a/docs/simulators/ns_simulator.rst +++ /dev/null @@ -1,28 +0,0 @@ -.. This work is licensed under a Creative Commons Attribution 4.0 - International License. http://creativecommons.org/licenses/by/4.0 - -.. _ns_simulator: - -:orphan: - -NS Simulator -============ - -Description ------------ - -TODO - - -Guides -====== - -User Guide ------------ - -TODO - -Developer Guide ---------------- - -TODO -- 2.16.6