From c668958a00317f5f8a5e201e8fdfcc7847a1b6c9 Mon Sep 17 00:00:00 2001 From: Krzysztof Kuzmicki Date: Mon, 19 Apr 2021 12:51:54 +0200 Subject: [PATCH] [INTEGRATION] NF simulator documentation - fix indents and bullet points fix indents and bullet points Issue-ID: INT-1869 Signed-off-by: Krzysztof Kuzmicki Change-Id: Id8e2462407fdd4facbdebb652d6b57f9ee2ab100 (cherry picked from commit 0da02f4ea83b49cc03895ee106ad0b4fdfbe36c8) --- docs/files/csv/simulators.csv | 3 +- docs/files/simulators/NF-Simulator.png | Bin 0 -> 48925 bytes docs/simulators/nf_simulator.rst | 148 +++++++++++++++++++++++++++++++++ docs/simulators/ns_simulator.rst | 28 ------- 4 files changed, 149 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..b52aaa5ff3b7b15459bfbed50a6335b74c5c0490 GIT binary patch literal 48925 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 K8P)V~_`d;lFE%Iu literal 0 HcmV?d00001 diff --git a/docs/simulators/nf_simulator.rst b/docs/simulators/nf_simulator.rst new file mode 100644 index 000000000..64a6ac3b5 --- /dev/null +++ b/docs/simulators/nf_simulator.rst @@ -0,0 +1,148 @@ +.. 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** + +1. 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 + +2. 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: +-------------- + +1. Purpose of VES Client + + Application that generates VES events on demand. + +2. What does it do? + + - Support both basic auth and TLS CMPv2 method of authentication. + - Allow to turn on and turn off hostname, verification in SSL. + - Allow to send one-time event and periodic events, based on event templates. + - Expose API to manage VES Client + - Provide 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 support 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: +------------------ + +1. Purpose of Netconf Server + + This server uses sysrepo to simulate network configuration. + It is based on sysrepo-netopeer2 image. + +2. 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: +---------------- + +1. Purpose of AVCN Manager + + Manager that fetch changes of configuration from kafka and sends them to VES client. + +2. What does it do? + + The manager process 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: +------------------- + +1. Purpose of PM HTTPS Server + + Server that is used in Bulk PM usecase over HTTPS + +2. What does it do? + + - Support TLS (CMPv2) method of authentication (used during connection to Data File Collector) + - Allow to use custom certificates + - Expose REST API in order to manage PM files stored in HTTPS server + + +Guides +====== + +User And Developer Guide +------------------------ +1. 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 `_ + +2. Jenkins builds: + + - `VES Client jenkins builds `_ + - `AVCN Manager jenkins builds `_ + - `PM HTTPS Server jenkins builds `_ + - `Netconf Server jenkins builds `_ + +3. 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 `_ + +4. 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