From ebc6907968050189688a0b8ccc0e0c42419a9202 Mon Sep 17 00:00:00 2001 From: osgn422w Date: Tue, 16 Mar 2021 16:27:47 +0100 Subject: [PATCH] Policy/Clamp doc update update the documentation to reflect the merge of clamp into Policy framework Issue-ID: REQ-684 Change-Id: I06391cb6468c15aba58bac18a5c042d05b6c8b9f Signed-off-by: osgn422w --- docs/architecture.rst | 37 +++++++++++------------ docs/images/architecture/monitoring.png | Bin 60890 -> 0 bytes docs/index.rst | 50 +++++++++----------------------- docs/user-guide.rst | 12 ++++---- 4 files changed, 38 insertions(+), 61 deletions(-) delete mode 100644 docs/images/architecture/monitoring.png diff --git a/docs/architecture.rst b/docs/architecture.rst index 79c8e06f5..b65eb1c1d 100644 --- a/docs/architecture.rst +++ b/docs/architecture.rst @@ -1,39 +1,41 @@ .. This work is licensed under a Creative Commons Attribution 4.0 International License. .. http://creativecommons.org/licenses/by/4.0 -.. Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved. +.. Copyright (c) 2017-2021 AT&T Intellectual Property. All rights reserved. .. _architecture: -Clamp in ONAP Architecture --------------------------- +Policy/Clamp in ONAP Architecture +--------------------------------- -CLAMP is a platform for designing and managing control loops. It is used to visualize -a control loop, configure it with specific parameters for a particular network +CLAMP platform has been integrated into the Policy framework project, starting as a POC during +Honolulu release and as a official feature with Istanbul release. So CLAMP must be seen now +as a function provided by the Policy Framework project. + +CLAMP is a function for designing and managing control loops and a UI to manage Policies. + It is used to visualize a control loop, configure it with specific parameters for a particular network service, then deploying and undeploying it. Once deployed, the user can also update the loop with new parameters during runtime, as well as suspending and restarting it. -It interacts with other systems to deploy and execute the control loop. For -example, it extracts the control loop blueprint and Policy Model(Model Driven Control Loop) -from CSAR distributed by SDC/DCAE-DS. -It requests from DCAE the instantiation of microservices -to manage the control loop flow. Furthermore, it creates and updates multiple -policies (for DCAE mS configuration and actual Control Operations) in the Policy Engine +Starting with Istanbul release, CLAMP GUI can also be used to create/read/update/delete/list policies +outside of a control loop, and therefore CLAMP is also the front-end for Policies management in ONAP. + +CLAMP interacts with other systems to deploy and execute the control loop. For +example, it extracts the control loop blueprint from CSAR distributed by SDC. +CLAMP also calls the internal Policy framework API to get the Policy Models(Model Driven Control Loop) +It requests from DCAE the instantiation of microservices. +to manage the control loop flow. Furthermore, it creates and updates multiple +policies (for DCAE mS configuration and actual Control Operations) in the Policy Engine that define the closed loop flow. |clamp-flow| -The ONAP CLAMP platform abstracts the details of these systems under the concept +The ONAP CLAMP function abstracts the details of these systems under the concept of a control loop model. The design of a control loop and its management is represented by a workflow in which all relevant system interactions take place. This is essential for a self-service model of creating and managing control loops, where no low-level user interaction with other components is required. -CLAMP also allows to visualize control loop metrics through a dashboard, in order -to help operations understand how and when a control loop is triggered and takes action. - -|dashboard-flow| - At a higher level, CLAMP is about supporting and managing the broad operational life cycle of VNFs/VMs and ultimately ONAP components itself. It will offer the ability to design, test, deploy and update control loop automation - both closed @@ -43,5 +45,4 @@ operational costs compared to traditional methods. |closed-loop| .. |clamp-flow| image:: images/architecture/distdepl.png -.. |dashboard-flow| image:: images/architecture/monitoring.png .. |closed-loop| image:: images/architecture/ONAP-closedloop.png diff --git a/docs/images/architecture/monitoring.png b/docs/images/architecture/monitoring.png deleted file mode 100644 index 6dbf75e45b0ddbe9f61cf969a2ab856d53d673e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60890 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\FrJdk6Z z+;4O*_)9LmD{FN?5Kv6aKSzQZ+keGUwjbR|NM!U!zkM2eEC8+JubOb;%;?oz;j9kW zH9_0EGTnW5c`*fO5R1$oV-6$v?jhP-f8p$| z#d}nl7=u1*o?LhJ=y**Lt$%tiTt%t?(Qu$cUE6p_Egm={DX6naK74JqTW~8gDId56 qz%7v9-Z+1<%gKNGeBHNwfN79%$mgIu@GDOl893~cb;U*B+y4OTHJ|4I diff --git a/docs/index.rst b/docs/index.rst index c8aafc23c..9be3af223 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,10 +1,10 @@ .. This work is licensed under a Creative Commons Attribution 4.0 International License. .. http://creativecommons.org/licenses/by/4.0 -.. Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved. +.. Copyright (c) 2017-2021 AT&T Intellectual Property. All rights reserved. .. _master_index: -CLAMP - Control Loop Automation Management Platform -=================================================== +Policy/CLAMP - Control Loop Automation Management Platform +========================================================== .. High level architecture, design, and packaging information for release planning and delivery. .. include:: architecture.rst @@ -12,7 +12,7 @@ CLAMP - Control Loop Automation Management Platform Offered APIs ------------ -The list of APIs that CLAMP has offered could be find in the following table: +The list of APIs that Policy/CLAMP has offered could be find in the following table: .. |pdf-icon| image:: images/pdf.png :width: 40px @@ -33,18 +33,17 @@ The list of APIs that CLAMP has offered could be find in the following table: Consumed APIs ------------- -CLAMP uses the API's exposed by the following ONAP components: +Policy/CLAMP uses the API's exposed by the following ONAP components: - SDC : REST based interface exposed by the SDC, Distribution of service to DCAE - DCAE: REST based interface exposed by DCAE, Common Controller Framework, DCAE microservices onboarded (TCA, Stringmatch, Holmes (optional)) -- Policy: REST based interface, Policy engine target both XACML and Drools PDP, Policy Engine trigger operations to App-C/VF-C/SDN-C +- Policy Core: REST based interface, Policy engine target both XACML and Drools PDP, Policy Engine trigger operations to App-C/VF-C/SDN-C - CDS: REST based interface, to retrieve list of operations/actions with their corresponding payload at runtime for Operational Policies where the field 'actor' is 'CDS'. Delivery -------- -CLAMP component is composed of a UI layer and a backend layer and packaged into a single container (single jar). -CLAMP also requires a database instance with 1 DB, it uses MariaDB. -CLAMP also uses an ELK stack (Elastic Search, Logstash and Kibana) for the Dashboard. +Policy/CLAMP component is composed of a UI layer and a backend layer and packaged into a single container (single jar). +Policy/CLAMP also requires a database instance with 1 DB, it uses MariaDB, which is the same DB as for the core Policy. .. blockdiag:: @@ -53,8 +52,6 @@ CLAMP also uses an ELK stack (Elastic Search, Logstash and Kibana) for the Dashb orientation = portrait CLAMP_UI -> CLAMP_BACKEND; CLAMP_BACKEND -> CLDSDB; - CLAMP_KIBANA -> CLAMP_ELASTICSEARCH; - CLAMP_LOGSTASH -> CLAMP_ELASTICSEARCH; group l1 { color = blue; label = "CLAMP container"; @@ -65,21 +62,6 @@ CLAMP also uses an ELK stack (Elastic Search, Logstash and Kibana) for the Dashb label = "MariaDB container"; CLDSDB; } - group l4 { - color = green; - label = "E_Search container"; - CLAMP_ELASTICSEARCH; - } - group l5 { - color = green; - label = "Kibana container"; - CLAMP_KIBANA; - } - group l6 { - color = green; - label = "LogStash container"; - CLAMP_LOGSTASH; - } } Logging & Diagnostic Information @@ -178,8 +160,8 @@ If the sdcAddress is not specified or not available (connection failure) the mes Administration -------------- -A user can access CLAMP UI at the following URL : https://localhost:3000. -(in this URL 'localhost' must be replaced by the actual host where CLAMP has been installed if it is not your current localhost) +A user can access Policy/CLAMP UI at the following URL : https://localhost:3000. +(in this URL 'localhost' must be replaced by the actual host where Policy/CLAMP has been installed if it is not your current localhost) For OOM, the URL is https://:30258 .. code-block:: html @@ -192,19 +174,13 @@ For OOM, the URL is https://:30258 ca path: src/main/resources/clds/aaf/org.onap.clamp.p12, password "China in the Spring" Or get it from this page : https://wiki.onap.org/display/DW/Control+Loop+Flows+and+Models+for+Casablanca -A user can access the Control-Loop DashBoard (ELK stack based) at the following URL : https://localhost:5601 . -(in this URL 'localhost' must be replaced by the actual host where CLAMP has been installed if it is not your current localhost) -For OOM, the URL is https://:30290. Since El Alto release, User access is protected using the Search Guard plugin, community Edition!, -for Kibana and ElasticSearch. The initial users and credentials provided by the Search Guard plugins are used by default. -(take a look at the files in the ElasticSearch docker image located in the folder: /usr/share/elasticsearch/config/sg/, -especially the file "sg_internal_users.yml"). - Human Interfaces ---------------- .. Basic info on the interface type, ports/protocols provided over, etc. -User Interface (CLAMP Designer) - serve to configure control loop -CLAMP UI is used to configure the Control Loop designed and distributed by SDC. From that UI it's possible to distribute the configuration policies and control the life-cycle of the DCAE Micro Services. +User Interface - serve to configure control loop +Policy/CLAMP UI is used to configure the Control Loop designed and distributed by SDC. From that UI it's possible to distribute the configuration policies and control the life-cycle of the DCAE Micro Services. +Policy/CLAMP UI is also used to manage Policies outside of a Control Loop. The following actions are done using the UI: diff --git a/docs/user-guide.rst b/docs/user-guide.rst index b3c1535b2..5cfcf1abd 100644 --- a/docs/user-guide.rst +++ b/docs/user-guide.rst @@ -1,10 +1,10 @@ .. This work is licensed under a Creative Commons Attribution 4.0 International License. .. http://creativecommons.org/licenses/by/4.0 -.. Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved. +.. Copyright (c) 2017-2021 AT&T Intellectual Property. All rights reserved. -Control loop in CLAMP ---------------------- -There are 2 control loop levels in CLAMP: +Control loop in Policy/CLAMP +---------------------------- +There are 2 control loop levels in Policy/CLAMP: - Control loop template: This is created from the DCAE blueprint (designed in the DCAE designer), and distributed by SDC to CLAMP. - Control loop instance: Based on the template, it represents a physical control loop in the platform related to a service and a VNF. @@ -116,8 +116,8 @@ In the *Loop Operations* menu, lists the operations to be perform to the loop. |clamp-loop-operation-menu| -Submitting the Control loop to policy -------------------------------------- +Submitting the Control loop to core policy +------------------------------------------ The SUBMIT operation can be used to send the configuration to policy engine. If everything is successful, the status to the policy will become *SENT*. Clamp should also show proper logs in logs view. -- 2.16.6