Set snapshot and/or references of policy/parent for new release 92/137992/1 master
authorsaul.gill <saul.gill@est.tech>
Mon, 20 May 2024 10:08:22 +0000 (11:08 +0100)
committersaul.gill <saul.gill@est.tech>
Mon, 20 May 2024 10:15:30 +0000 (11:15 +0100)
policy/parent updated to its latest own and reference snapshots

*** This commit is generated by a PF release script ***

Issue-ID: POLICY-4999
Change-Id: I45b807cdb0bd6293c13fa496d3f0cc739ea9176e
Signed-off-by: saul.gill <saul.gill@est.tech>
61 files changed:
checkstyle/pom.xml
docs/clamp/acm/acm-participant-guide.rst
docs/clamp/acm/acm-user-guide.rst
docs/clamp/acm/design-impl/participants/participants.rst
docs/clamp/acm/design-impl/participants/sim-participant.rst [new file with mode: 0644]
docs/clamp/acm/design-impl/participants/swagger/participant-sim.json
docs/clamp/acm/draw.io/acm-participant-sim.drawio [new file with mode: 0644]
docs/clamp/acm/images/participants/sim-participant.png [new file with mode: 0644]
docs/development/devtools/smoke/acm-participants-smoke.rst
docs/development/devtools/smoke/clamp-ac-participant-protocol-smoke.rst
docs/development/devtools/smoke/clamp-smoke.rst
docs/development/devtools/smoke/distribution-smoke.rst
docs/development/devtools/smoke/files/api-application.yaml [new file with mode: 0644]
docs/development/devtools/smoke/files/docker-compose-local.yaml [new file with mode: 0644]
docs/development/devtools/smoke/files/docker-compose-policy.yaml [new file with mode: 0644]
docs/development/devtools/smoke/files/mariadb.sql [new file with mode: 0644]
docs/development/devtools/smoke/files/pap-application.yaml [new file with mode: 0644]
docs/development/devtools/smoke/files/participant-http-application.yaml [new file with mode: 0644]
docs/development/devtools/smoke/files/participant-kubernetes-application.yaml [new file with mode: 0644]
docs/development/devtools/smoke/files/participant-policy-application.yaml [new file with mode: 0644]
docs/development/devtools/smoke/files/participant-sim-application.yaml [new file with mode: 0644]
docs/development/devtools/smoke/files/runtime-application.yaml [new file with mode: 0644]
docs/development/devtools/smoke/json/acm-instantiation.json
docs/development/devtools/smoke/json/instantiation_pptnt_smoke.json
docs/development/devtools/smoke/policy-participant-smoke.rst
docs/development/devtools/smoke/xacml-smoke.rst
docs/development/devtools/testing/s3p/clamp-s3p-results/acm_performance_jmeter.png
docs/development/devtools/testing/s3p/clamp-s3p-results/acm_stability_jmeter.png
docs/development/devtools/testing/s3p/clamp-s3p-results/acm_stability_table.png
docs/development/devtools/testing/s3p/clamp-s3p.rst
docs/development/devtools/testing/s3p/distribution-s3p-results/performance-monitor.png
docs/development/devtools/testing/s3p/distribution-s3p-results/performance-statistics.png
docs/development/devtools/testing/s3p/distribution-s3p-results/performance-threads.png
docs/development/devtools/testing/s3p/distribution-s3p-results/performance-threshold.png
docs/development/devtools/testing/s3p/distribution-s3p-results/stability-monitor.png
docs/development/devtools/testing/s3p/distribution-s3p-results/stability-statistics.png
docs/development/devtools/testing/s3p/distribution-s3p-results/stability-threads.png
docs/development/devtools/testing/s3p/distribution-s3p-results/stability-threshold.png
docs/development/devtools/testing/s3p/pap-s3p-results/pap_performance_jmeter_results.png
docs/development/devtools/testing/s3p/pap-s3p-results/pap_stability_jmeter_results.png
docs/development/devtools/testing/s3p/pap-s3p-results/pap_stats_after_72h.png
docs/development/devtools/testing/s3p/pap-s3p-results/pap_stats_before_72h.png
docs/development/devtools/testing/s3p/pap-s3p-results/pap_stats_during_72h.png
docs/development/devtools/testing/s3p/pap-s3p.rst
docs/development/devtools/testing/s3p/xacml-s3p-results/s3p-perf-xacml.png [changed mode: 0755->0644]
docs/development/devtools/testing/s3p/xacml-s3p-results/s3p-stability-xacml.png [changed mode: 0755->0644]
docs/development/devtools/testing/s3p/xacml-s3p.rst
docs/development/property-configuration.rst
docs/pap/notification/kafka-pap-notif.json [moved from docs/pap/notification/dmaap-pap-notif.json with 100% similarity]
docs/pap/pap.rst
docs/pap/response/pdp-statistics-pap-resp.json [deleted file]
docs/pap/response/statistics-pap-resp.json [deleted file]
integration/pom.xml
integration/src/main/resources/release/14.0.0-ONAP_pf_release_data.csv [new file with mode: 0644]
integration/src/main/resources/release/pf_release_data.csv
integration/src/main/scripts/release/updateRefs.sh
pom.xml
releases/4.1.3.yaml [new file with mode: 0644]
releases/4.1.4.yaml [new file with mode: 0644]
resources/pom.xml
version.properties

index 313e427..d2518ee 100644 (file)
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.onap.policy.parent</groupId>
         <artifactId>policy-parent</artifactId>
-        <version>4.1.3-SNAPSHOT</version>
+        <version>5.0.0-SNAPSHOT</version>
     </parent>
     <artifactId>checkstyle</artifactId>
     <name>checkstyle</name>
index a98e66b..b4ca885 100644 (file)
@@ -194,6 +194,108 @@ Any new functionality in the future will be wrapped by this class.
 Default implementation are supported for the methods: lock, unlock, update, migrate, delete, prime, deprime, handleRestartComposition and handleRestartInstance.
 
 
+Methods: deploy, undeploy, lock, unlock and delete
+  compositionElement:
+    ======================  =======================================
+     **field**                       **description**
+    ======================  =======================================
+     compositionId           composition definition Id
+     elementDefinitionId     composition definition element Id
+     inProperties            composition definition in-properties
+     outProperties           composition definition out-properties
+    ======================  =======================================
+  instanceElement:
+    ==============================  ===========================
+     **field**                       **description**
+    ==============================  ===========================
+     instanceId                      instance id
+     elementId                       instance element id
+     toscaServiceTemplateFragment    policies and policy types
+     inProperties                    instance in-properties
+      outProperties                  instance out-properties
+    ==============================  ===========================
+
+Method: update
+  compositionElement:
+    ======================  =======================================
+     **field**                       **description**
+    ======================  =======================================
+     compositionId           composition definition Id
+     elementDefinitionId     composition definition element Id
+     inProperties            composition definition in-properties
+     outProperties           composition definition out-properties
+    ======================  =======================================
+  instanceElement:
+    ==============================  ================================================
+     **field**                       **description**
+    ==============================  ================================================
+     instanceId                      instance id
+     elementId                       instance element id
+     toscaServiceTemplateFragment
+     inProperties                    instance in-properties **(before the update)**
+      outProperties                  instance out-properties
+    ==============================  ================================================
+  instanceElementUpdated:
+    ==============================  ======================================
+     **field**                       **description**
+    ==============================  ======================================
+     instanceId                      instance id
+     elementId                       instance element id
+     toscaServiceTemplateFragment
+     inProperties                    instance in-properties **(updated)**
+      outProperties                  instance out-properties
+    ==============================  ======================================
+
+Methods: prime, deprime
+  composition:
+    ======================  ===================================================================
+     **field**                       **description**
+    ======================  ===================================================================
+     compositionId           composition definition Id
+     inProperties            composition definition in-properties for each definition element
+     outProperties           composition definition out-properties for each definition element
+    ======================  ===================================================================
+
+Method: migrate
+  compositionElement:
+    ======================  =======================================
+     **field**                       **description**
+    ======================  =======================================
+     compositionId           composition definition Id
+     elementDefinitionId     composition definition element Id
+     inProperties            composition definition in-properties
+     outProperties           composition definition out-properties
+    ======================  =======================================
+  compositionElementTarget:
+    ======================  ==============================================
+     **field**                       **description**
+    ======================  ==============================================
+     compositionId           composition definition target Id
+     elementDefinitionId     composition definition target element Id
+     inProperties            composition definition target in-properties
+     outProperties           composition definition target out-properties
+    ======================  ==============================================
+  instanceElement:
+    ==============================  ===================================================
+     **field**                       **description**
+    ==============================  ===================================================
+     instanceId                      instance id
+     elementId                       instance element id
+     toscaServiceTemplateFragment
+     inProperties                    instance in-properties **(before the migration)**
+      outProperties                  instance out-properties
+    ==============================  ===================================================
+  instanceElementMigrate:
+    ==============================  ======================================
+     **field**                       **description**
+    ==============================  ======================================
+     instanceId                      instance id
+     elementId                       instance element id
+     toscaServiceTemplateFragment
+     inProperties                    instance in-properties **(updated)**
+      outProperties                  instance out-properties
+    ==============================  ======================================
+
 APIs to invoke
 --------------
 ParticipantIntermediaryApi:
@@ -665,4 +767,4 @@ error scenarios in the participant with the suitable approach.
 
 Tips:
 If the participant tries to undeploy an element which doesn’t exist in the system any more (due to various other external factors),
-it could update the element state to â€˜undeployed’ using the Intermediary api.
\ No newline at end of file
+it could update the element state to â€˜undeployed’ using the Intermediary api.
index faab7e6..3c56f90 100644 (file)
@@ -418,7 +418,7 @@ The Json below is an example of configuration:
 
 Update and send composition outProperites
 -----------------------------------------
-Data like useState operationalState and outProperites could be updated any time using the following endpoint:
+Composition Definition outProperites could be updated any time using the following endpoint:
 
 .. code-block:: bash
 
@@ -454,7 +454,7 @@ could be read using the following endpoint:
 
 Update and send useState operationalState and instance outProperites
 --------------------------------------------------------------------
-Data like useState operationalState and outProperites could be updated any time using the following endpoint:
+AC instance data like useState operationalState and outProperites could be updated any time using the following endpoint:
 
 .. code-block:: bash
 
@@ -466,7 +466,7 @@ The Json below is an example of update, where {{instanceId}} is the UUID of the
 
   {
         "outProperties": {
-            "Opresult": true,
+            "result": true,
             "list": [
                 {"id": 1 },
                 {"id": 2 }
index 6b12b7c..254d80c 100644 (file)
@@ -38,3 +38,4 @@ The detailed implementation of the CLAMP Participant ecosystem is described on t
    a1pms-participant
    kserve-participant
    policy-framework-participant
+   sim-participant
diff --git a/docs/clamp/acm/design-impl/participants/sim-participant.rst b/docs/clamp/acm/design-impl/participants/sim-participant.rst
new file mode 100644 (file)
index 0000000..96683a6
--- /dev/null
@@ -0,0 +1,42 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+.. _clamp-acm-sim-participant:
+
+Simulator Participant
+#####################
+
+This can be used for simulation testing purpose when there are no actual frameworks or a full deployment.
+Typically the Simulator Participant can be used with other Simulator participants with different supported element types.
+Once the microservice is up, the Simulator participants can be used to test CLAMP runtime and intermediary library.
+It supports the message Broker Kafka.
+
+.. image:: ../../images/participants/sim-participant.png
+
+Supported Element Types
+-----------------------
+Supported Element Types for Simulator participant will be used to define a whatever participant Element Definition Types in tosca template.
+Participant Supported Element Types is defined in Simulator participant application.yaml.
+The example below shows how to mock the HTTP participant:
+
+.. code-block:: YAML
+
+    participantSupportedElementTypes:
+      -
+        typeName: org.onap.policy.clamp.acm.HttpAutomationCompositionElement
+        typeVersion: 1.0.0
+
+Supported participant Interactions:
+-----------------------------------
+The Simulator participant interacts with ACM Runtime on the northbound via Message Broker. It interacts with tester via Rest Api.
+
+The communication for the Automation Composition updates and state change requests are sent from the ACM Runtime to the participant via Message Broker.
+The tester can invoke the appropriate endpoint of the participant to change the behavior of how the participant should replay to ACM runtime.
+
+Participant Simulator API
+=========================
+
+This API allows a Participant Simulator to be started and run for test purposes.
+
+:download:`Download Policy Participant Simulator API Swagger  <swagger/participant-sim.json>`
+
+.. swaggerv2doc:: swagger/participant-sim.json
index b258f85..3be2d34 100644 (file)
 {
-    "swagger": "2.0",
+    "openapi": "3.0.1",
     "info": {
-        "description": "Api Documentation",
-        "version": "1.0",
-        "title": "Api Documentation",
-        "termsOfService": "urn:tos",
-        "contact": {},
+        "title": "ACM Mock Participant",
+        "description": "CLAMP Mock Participant API",
         "license": {
             "name": "Apache 2.0",
             "url": "http://www.apache.org/licenses/LICENSE-2.0"
         }
     },
+    "externalDocs": {
+        "description": "CLAMP Automation Composition Management Documentation",
+        "url": "https://docs.onap.org/projects/onap-policy-parent/en/latest/clamp/clamp.html"
+    },
+    "servers": [
+        {
+            "url": "http://localhost:8084/onap/policy/clamp/acm/simparticipant",
+            "description": "Generated server url"
+        }
+    ],
     "paths": {
-        "/onap/participantsim/v2/elements": {
-            "put": {
+        "/v2/parameters": {
+            "get": {
                 "tags": [
-                    "Clamp Automation Composition Participant Simulator API"
-                ],
-                "summary": "Updates simulated automation composition elements",
-                "description": "Updates simulated automation composition elements, returning the updated automation composition definition IDs",
-                "operationId": "updateUsingPUT",
-                "consumes": [
-                    "application/json"
-                ],
-                "produces": [
-                    "application/json",
-                    "application/yaml"
+                    "Simulator-participant-controller"
                 ],
+                "summary": "Return all Parameters",
+                "description": "Return all the parameters configured in the Simulator Participant",
+                "operationId": "getConfig",
                 "parameters": [
                     {
-                        "in": "body",
-                        "name": "body",
-                        "description": "Body of a automation composition element",
-                        "required": true,
+                        "name": "X-onap-RequestId",
+                        "in": "header",
+                        "description": "RequestID for http transaction",
+                        "required": false,
                         "schema": {
-                            "$ref": "#/definitions/AutomationCompositionElementReq",
-                            "originalRef": "AutomationCompositionElementReq"
+                            "type": "string",
+                            "format": "uuid"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK, reutrns a serialised instance of [SimConfig](https://github.com/onap/policy-clamp/blob/master/participant/participant-impl/policy-clamp-participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/sim/model/SimConfig.java)",
+                        "content": {
+                            "application/json": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/SimConfig"
+                                }
+                            }
                         }
                     },
+                    "401": {
+                        "description": "Authorization Error",
+                        "content": {
+                            "application/json": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/SimConfig"
+                                }
+                            },
+                            "application/yaml": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/SimConfig"
+                                }
+                            }
+                        }
+                    },
+                    "500": {
+                        "description": "Internal Server Error",
+                        "content": {
+                            "application/json": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/SimConfig"
+                                }
+                            },
+                            "application/yaml": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/SimConfig"
+                                }
+                            }
+                        }
+                    }
+                },
+                "security": [
+                    {
+                        "basicAuth": []
+                    }
+                ]
+            },
+            "put": {
+                "tags": [
+                    "Simulator-participant-controller"
+                ],
+                "summary": "change the parameters",
+                "description": "Change the parameters the behaviour of the Simulator Participant",
+                "operationId": "setConfig",
+                "parameters": [
                     {
                         "name": "X-ONAP-RequestID",
                         "in": "header",
                         "description": "RequestID for http transaction",
                         "required": false,
-                        "type": "string",
-                        "format": "uuid"
+                        "schema": {
+                            "type": "string",
+                            "format": "uuid"
+                        }
                     }
                 ],
+                "requestBody": {
+                    "content": {
+                        "application/json": {
+                            "schema": {
+                                "$ref": "#/components/schemas/SimConfig"
+                            }
+                        },
+                        "application/yaml": {
+                            "schema": {
+                                "$ref": "#/components/schemas/SimConfig"
+                            }
+                        }
+                    },
+                    "required": true
+                },
                 "responses": {
                     "200": {
-                        "description": "OK",
-                        "schema": {
-                            "$ref": "#/definitions/TypedSimpleResponse«AutomationCompositionElement»",
-                            "originalRef": "TypedSimpleResponse«AutomationCompositionElement»"
-                        }
+                        "description": "OK, the parameters has been saved"
                     },
-                    "201": {
-                        "description": "Created"
+                    "400": {
+                        "description": "Bad Request"
                     },
                     "401": {
-                        "description": "Authentication Error",
-                        "headers": {
-                            "X-LatestVersion": {
-                                "type": "string"
-                            },
-                            "X-PatchVersion": {
-                                "type": "string"
-                            },
-                            "X-MinorVersion": {
-                                "type": "string"
-                            },
-                            "X-ONAP-RequestID": {
-                                "type": "string",
-                                "format": "uuid"
+                        "description": "Authorization Error"
+                    },
+                    "500": {
+                        "description": "Internal Server Error"
+                    }
+                },
+                "security": [
+                    {
+                        "basicAuth": []
+                    }
+                ]
+            }
+        },
+        "/v2/datas": {
+            "get": {
+                "tags": [
+                    "Simulator-participant-controller"
+                ],
+                "summary": "Query details of the requested internal datas",
+                "description": "Query details of the requested internal datas",
+                "operationId": "getDatas",
+                "parameters": [
+                    {
+                        "name": "X-onap-RequestId",
+                        "in": "header",
+                        "description": "RequestID for http transaction",
+                        "required": false,
+                        "schema": {
+                            "type": "string",
+                            "format": "uuid"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Serialised instance of [InternalDatas](https://github.com/onap/policy-clamp/blob/master/participant/participant-impl/policy-clamp-participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/sim/model/InternalDatas.java)",
+                        "content": {
+                            "application/json": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/InternalDatas"
+                                }
                             }
                         }
                     },
-                    "403": {
+                    "401": {
                         "description": "Authorization Error",
-                        "headers": {
-                            "X-LatestVersion": {
-                                "type": "string"
-                            },
-                            "X-PatchVersion": {
-                                "type": "string"
-                            },
-                            "X-MinorVersion": {
-                                "type": "string"
-                            },
-                            "X-ONAP-RequestID": {
-                                "type": "string",
-                                "format": "uuid"
+                        "content": {
+                            "application/json": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/InternalDatas"
+                                }
+                            },
+                            "application/yaml": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/InternalDatas"
+                                }
                             }
                         }
                     },
-                    "404": {
-                        "description": "Not Found"
-                    },
                     "500": {
                         "description": "Internal Server Error",
-                        "headers": {
-                            "X-LatestVersion": {
-                                "type": "string"
-                            },
-                            "X-PatchVersion": {
-                                "type": "string"
-                            },
-                            "X-MinorVersion": {
-                                "type": "string"
-                            },
-                            "X-ONAP-RequestID": {
-                                "type": "string",
-                                "format": "uuid"
+                        "content": {
+                            "application/json": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/InternalDatas"
+                                }
+                            },
+                            "application/yaml": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/InternalDatas"
+                                }
                             }
                         }
                     }
                     {
                         "basicAuth": []
                     }
+                ]
+            },
+            "put": {
+                "tags": [
+                    "Simulator-participant-controller"
                 ],
-                "x-interface info": {
-                    "api-version": "1.0.0",
-                    "last-mod-release": "Dublin"
-                }
+                "summary": "change the parameters",
+                "description": "Change the data of the Simulator Participant",
+                "operationId": "setData",
+                "parameters": [
+                    {
+                        "name": "X-ONAP-RequestID",
+                        "in": "header",
+                        "description": "RequestID for http transaction",
+                        "required": false,
+                        "schema": {
+                            "type": "string",
+                            "format": "uuid"
+                        }
+                    }
+                ],
+                "requestBody": {
+                    "content": {
+                        "application/json": {
+                            "schema": {
+                                "$ref": "#/components/schemas/InternalData"
+                            }
+                        },
+                        "application/yaml": {
+                            "schema": {
+                                "$ref": "#/components/schemas/InternalData"
+                            }
+                        }
+                    },
+                    "required": true
+                },
+                "responses": {
+                    "200": {
+                        "description": "OK, the data has been saved"
+                    },
+                    "400": {
+                        "description": "Bad Request"
+                    },
+                    "401": {
+                        "description": "Authorization Error"
+                    },
+                    "500": {
+                        "description": "Internal Server Error"
+                    }
+                },
+                "security": [
+                    {
+                        "basicAuth": []
+                    }
+                ]
             }
         },
-        "/onap/participantsim/v2/elements/{name}/{version}": {
+        "/v2/compositiondatas": {
             "get": {
                 "tags": [
-                    "Clamp Automation Composition Participant Simulator API"
-                ],
-                "summary": "Query details of the requested simulated automation composition elements",
-                "description": "Queries details of the requested simulated automation composition elements, returning all automation composition element details",
-                "operationId": "elementsUsingGET",
-                "produces": [
-                    "application/json",
-                    "application/yaml"
+                    "Simulator-participant-controller"
                 ],
+                "summary": "Query details of the requested internal composition datas",
+                "description": "Query details of the requested internal composition datas",
+                "operationId": "getCompositionDatas",
                 "parameters": [
                     {
-                        "name": "name",
-                        "in": "path",
-                        "description": "Automation Composition element name",
-                        "required": true,
-                        "type": "string"
-                    },
-                    {
-                        "name": "version",
-                        "in": "path",
-                        "description": "Automation Composition element version",
-                        "required": true,
-                        "type": "string"
-                    },
-                    {
-                        "name": "X-ONAP-RequestID",
+                        "name": "X-onap-RequestId",
                         "in": "header",
                         "description": "RequestID for http transaction",
                         "required": false,
-                        "type": "string",
-                        "format": "uuid"
+                        "schema": {
+                            "type": "string",
+                            "format": "uuid"
+                        }
                     }
                 ],
                 "responses": {
                     "200": {
-                        "description": "OK",
-                        "schema": {
-                            "type": "object",
-                            "additionalProperties": {
-                                "$ref": "#/definitions/AutomationCompositionElementRes",
-                                "originalRef": "AutomationCompositionElementRes"
+                        "description": "Serialised instance of [InternalDatas](https://github.com/onap/policy-clamp/blob/master/participant/participant-impl/policy-clamp-participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/sim/model/InternalDatas.java)",
+                        "content": {
+                            "application/json": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/InternalDatas"
+                                }
                             }
                         }
                     },
                     "401": {
-                        "description": "Authentication Error",
-                        "headers": {
-                            "X-LatestVersion": {
-                                "type": "string"
-                            },
-                            "X-PatchVersion": {
-                                "type": "string"
-                            },
-                            "X-MinorVersion": {
-                                "type": "string"
-                            },
-                            "X-ONAP-RequestID": {
-                                "type": "string",
-                                "format": "uuid"
-                            }
-                        }
-                    },
-                    "403": {
                         "description": "Authorization Error",
-                        "headers": {
-                            "X-LatestVersion": {
-                                "type": "string"
-                            },
-                            "X-PatchVersion": {
-                                "type": "string"
-                            },
-                            "X-MinorVersion": {
-                                "type": "string"
-                            },
-                            "X-ONAP-RequestID": {
-                                "type": "string",
-                                "format": "uuid"
+                        "content": {
+                            "application/json": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/InternalDatas"
+                                }
+                            },
+                            "application/yaml": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/InternalDatas"
+                                }
                             }
                         }
                     },
-                    "404": {
-                        "description": "Not Found"
-                    },
                     "500": {
                         "description": "Internal Server Error",
-                        "headers": {
-                            "X-LatestVersion": {
-                                "type": "string"
-                            },
-                            "X-PatchVersion": {
-                                "type": "string"
-                            },
-                            "X-MinorVersion": {
-                                "type": "string"
-                            },
-                            "X-ONAP-RequestID": {
-                                "type": "string",
-                                "format": "uuid"
+                        "content": {
+                            "application/json": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/InternalDatas"
+                                }
+                            },
+                            "application/yaml": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/InternalDatas"
+                                }
                             }
                         }
                     }
                     {
                         "basicAuth": []
                     }
-                ],
-                "x-interface info": {
-                    "api-version": "1.0.0",
-                    "last-mod-release": "Dublin"
-                }
-            }
-        },
-        "/onap/participantsim/v2/participants": {
+                ]
+            },
             "put": {
                 "tags": [
-                    "Clamp Automation Composition Participant Simulator API"
-                ],
-                "summary": "Updates simulated participants",
-                "description": "Updates simulated participants, returning the updated automation composition definition IDs",
-                "operationId": "updateUsingPUT_1",
-                "consumes": [
-                    "application/json"
-                ],
-                "produces": [
-                    "application/json",
-                    "application/yaml"
+                    "Simulator-participant-controller"
                 ],
+                "summary": "change the parameters",
+                "description": "Change the data of the Simulator Participant",
+                "operationId": "setCompositionData",
                 "parameters": [
-                    {
-                        "in": "body",
-                        "name": "body",
-                        "description": "Body of a participant",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/ParticipantReq",
-                            "originalRef": "ParticipantReq"
-                        }
-                    },
                     {
                         "name": "X-ONAP-RequestID",
                         "in": "header",
                         "description": "RequestID for http transaction",
                         "required": false,
-                        "type": "string",
-                        "format": "uuid"
+                        "schema": {
+                            "type": "string",
+                            "format": "uuid"
+                        }
                     }
                 ],
+                "requestBody": {
+                    "content": {
+                        "application/json": {
+                            "schema": {
+                                "$ref": "#/components/schemas/InternalData"
+                            }
+                        },
+                        "application/yaml": {
+                            "schema": {
+                                "$ref": "#/components/schemas/InternalData"
+                            }
+                        }
+                    },
+                    "required": true
+                },
                 "responses": {
                     "200": {
-                        "description": "OK",
-                        "schema": {
-                            "$ref": "#/definitions/TypedSimpleResponse«Participant»",
-                            "originalRef": "TypedSimpleResponse«Participant»"
-                        }
+                        "description": "OK, the data has been saved"
                     },
-                    "201": {
-                        "description": "Created"
+                    "400": {
+                        "description": "Bad Request"
                     },
                     "401": {
-                        "description": "Authentication Error",
-                        "headers": {
-                            "X-LatestVersion": {
-                                "type": "string"
-                            },
-                            "X-PatchVersion": {
-                                "type": "string"
-                            },
-                            "X-MinorVersion": {
-                                "type": "string"
-                            },
-                            "X-ONAP-RequestID": {
-                                "type": "string",
-                                "format": "uuid"
+                        "description": "Authorization Error"
+                    },
+                    "500": {
+                        "description": "Internal Server Error"
+                    }
+                },
+                "security": [
+                    {
+                        "basicAuth": []
+                    }
+                ]
+            }
+        },
+        "/v2/instances": {
+            "get": {
+                "tags": [
+                    "Simulator-participant-controller"
+                ],
+                "summary": "Query details of the requested automation composition instances",
+                "description": "Query details of the requested automation composition instances for the given automation composition definition ID, returning details of all its automation composition instances",
+                "operationId": "getAutomationCompositions",
+                "parameters": [
+                    {
+                        "name": "X-onap-RequestId",
+                        "in": "header",
+                        "description": "RequestID for http transaction",
+                        "required": false,
+                        "schema": {
+                            "type": "string",
+                            "format": "uuid"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Serialised instance of [AutomationCompositions](https://github.com/onap/policy-clamp/blob/master/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositions.java) containing a list of automation composition instances found",
+                        "content": {
+                            "application/json": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/AutomationCompositions"
+                                }
                             }
                         }
                     },
-                    "403": {
+                    "401": {
                         "description": "Authorization Error",
-                        "headers": {
-                            "X-LatestVersion": {
-                                "type": "string"
-                            },
-                            "X-PatchVersion": {
-                                "type": "string"
-                            },
-                            "X-MinorVersion": {
-                                "type": "string"
-                            },
-                            "X-ONAP-RequestID": {
-                                "type": "string",
-                                "format": "uuid"
+                        "content": {
+                            "application/json": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/AutomationCompositions"
+                                }
+                            },
+                            "application/yaml": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/AutomationCompositions"
+                                }
                             }
                         }
                     },
-                    "404": {
-                        "description": "Not Found"
-                    },
                     "500": {
                         "description": "Internal Server Error",
-                        "headers": {
-                            "X-LatestVersion": {
-                                "type": "string"
-                            },
-                            "X-PatchVersion": {
-                                "type": "string"
-                            },
-                            "X-MinorVersion": {
-                                "type": "string"
-                            },
-                            "X-ONAP-RequestID": {
-                                "type": "string",
-                                "format": "uuid"
+                        "content": {
+                            "application/json": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/AutomationCompositions"
+                                }
+                            },
+                            "application/yaml": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/AutomationCompositions"
+                                }
                             }
                         }
                     }
                     {
                         "basicAuth": []
                     }
-                ],
-                "x-interface info": {
-                    "api-version": "1.0.0",
-                    "last-mod-release": "Dublin"
-                }
+                ]
             }
         },
-        "/onap/participantsim/v2/participants/{name}/{version}": {
+        "/v2/instances/{instanceId}": {
             "get": {
                 "tags": [
-                    "Clamp Automation Composition Participant Simulator API"
-                ],
-                "summary": "Query details of the requested simulated participants",
-                "description": "Queries details of the requested simulated participants, returning all participant details",
-                "operationId": "participantsUsingGET",
-                "produces": [
-                    "application/json",
-                    "application/yaml"
+                    "Simulator-participant-controller"
                 ],
+                "summary": "Get automation composition instance details.",
+                "description": "Get details of the requested automation composition instance.",
+                "operationId": "getAutomationComposition",
                 "parameters": [
                     {
-                        "name": "name",
+                        "name": "instanceId",
                         "in": "path",
-                        "description": "Participant name",
+                        "description": "The UUID of the automation composition instance to get",
                         "required": true,
-                        "type": "string"
-                    },
-                    {
-                        "name": "version",
-                        "in": "path",
-                        "description": "Participant version",
-                        "required": true,
-                        "type": "string"
+                        "schema": {
+                            "type": "string",
+                            "format": "uuid"
+                        }
                     },
                     {
-                        "name": "X-ONAP-RequestID",
+                        "name": "X-onap-RequestId",
                         "in": "header",
                         "description": "RequestID for http transaction",
                         "required": false,
-                        "type": "string",
-                        "format": "uuid"
+                        "schema": {
+                            "type": "string",
+                            "format": "uuid"
+                        }
                     }
                 ],
                 "responses": {
                     "200": {
-                        "description": "OK",
-                        "schema": {
-                            "type": "array",
-                            "items": {
-                                "$ref": "#/definitions/ParticipantRes",
-                                "originalRef": "ParticipantRes"
+                        "description": "Serialised instance of [AutomationComposition](https://github.com/onap/policy-clamp/blob/master/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationComposition.java) containing the automation composition instance",
+                        "content": {
+                            "application/json": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/AutomationComposition"
+                                }
                             }
                         }
                     },
                     "401": {
-                        "description": "Authentication Error",
-                        "headers": {
-                            "X-LatestVersion": {
-                                "type": "string"
-                            },
-                            "X-PatchVersion": {
-                                "type": "string"
-                            },
-                            "X-MinorVersion": {
-                                "type": "string"
-                            },
-                            "X-ONAP-RequestID": {
-                                "type": "string",
-                                "format": "uuid"
-                            }
-                        }
-                    },
-                    "403": {
                         "description": "Authorization Error",
-                        "headers": {
-                            "X-LatestVersion": {
-                                "type": "string"
-                            },
-                            "X-PatchVersion": {
-                                "type": "string"
-                            },
-                            "X-MinorVersion": {
-                                "type": "string"
-                            },
-                            "X-ONAP-RequestID": {
-                                "type": "string",
-                                "format": "uuid"
+                        "content": {
+                            "application/json": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/AutomationComposition"
+                                }
+                            },
+                            "application/yaml": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/AutomationComposition"
+                                }
                             }
                         }
                     },
-                    "404": {
-                        "description": "Not Found"
-                    },
                     "500": {
                         "description": "Internal Server Error",
-                        "headers": {
-                            "X-LatestVersion": {
-                                "type": "string"
-                            },
-                            "X-PatchVersion": {
-                                "type": "string"
-                            },
-                            "X-MinorVersion": {
-                                "type": "string"
-                            },
-                            "X-ONAP-RequestID": {
-                                "type": "string",
-                                "format": "uuid"
+                        "content": {
+                            "application/json": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/AutomationComposition"
+                                }
+                            },
+                            "application/yaml": {
+                                "schema": {
+                                    "$ref": "#/components/schemas/AutomationComposition"
+                                }
                             }
                         }
                     }
                     {
                         "basicAuth": []
                     }
-                ],
-                "x-interface info": {
-                    "api-version": "1.0.0",
-                    "last-mod-release": "Dublin"
+                ]
+            }
+        }
+    },
+    "components": {
+        "schemas": {
+            "SimConfig": {
+                "type": "object",
+                "properties": {
+                    "deploySuccess": {
+                        "type": "boolean"
+                    },
+                    "undeploySuccess": {
+                        "type": "boolean"
+                    },
+                    "lockSuccess": {
+                        "type": "boolean"
+                    },
+                    "unlockSuccess": {
+                        "type": "boolean"
+                    },
+                    "deleteSuccess": {
+                        "type": "boolean"
+                    },
+                    "updateSuccess": {
+                        "type": "boolean"
+                    },
+                    "migrateSuccess": {
+                        "type": "boolean"
+                    },
+                    "primeSuccess": {
+                        "type": "boolean"
+                    },
+                    "deprimeSuccess": {
+                        "type": "boolean"
+                    },
+                    "deployTimerMs": {
+                        "type": "integer",
+                        "format": "int32"
+                    },
+                    "undeployTimerMs": {
+                        "type": "integer",
+                        "format": "int32"
+                    },
+                    "lockTimerMs": {
+                        "type": "integer",
+                        "format": "int32"
+                    },
+                    "unlockTimerMs": {
+                        "type": "integer",
+                        "format": "int32"
+                    },
+                    "updateTimerMs": {
+                        "type": "integer",
+                        "format": "int32"
+                    },
+                    "migrateTimerMs": {
+                        "type": "integer",
+                        "format": "int32"
+                    },
+                    "deleteTimerMs": {
+                        "type": "integer",
+                        "format": "int32"
+                    },
+                    "primeTimerMs": {
+                        "type": "integer",
+                        "format": "int32"
+                    },
+                    "deprimeTimerMs": {
+                        "type": "integer",
+                        "format": "int32"
+                    }
+                }
+            },
+            "InternalData": {
+                "type": "object",
+                "properties": {
+                    "intProperties": {
+                        "type": "object",
+                        "additionalProperties": {
+                            "type": "object"
+                        }
+                    },
+                    "outProperties": {
+                        "type": "object",
+                        "additionalProperties": {
+                            "type": "object"
+                        }
+                    },
+                    "compositionId": {
+                        "type": "string",
+                        "format": "uuid"
+                    },
+                    "compositionDefinitionElementId": {
+                        "$ref": "#/components/schemas/ToscaConceptIdentifier"
+                    },
+                    "automationCompositionId": {
+                        "type": "string",
+                        "format": "uuid"
+                    },
+                    "automationCompositionElementId": {
+                        "type": "string",
+                        "format": "uuid"
+                    },
+                    "useState": {
+                        "type": "string"
+                    },
+                    "operationalState": {
+                        "type": "string"
+                    }
+                }
+            },
+            "ToscaConceptIdentifier": {
+                "type": "object",
+                "properties": {
+                    "name": {
+                        "type": "string"
+                    },
+                    "version": {
+                        "type": "string"
+                    }
+                }
+            },
+            "AutomationComposition": {
+                "type": "object",
+                "properties": {
+                    "name": {
+                        "type": "string"
+                    },
+                    "version": {
+                        "type": "string"
+                    },
+                    "derivedFrom": {
+                        "type": "string"
+                    },
+                    "metadata": {
+                        "type": "object",
+                        "additionalProperties": {
+                            "type": "object"
+                        }
+                    },
+                    "description": {
+                        "type": "string"
+                    },
+                    "instanceId": {
+                        "type": "string",
+                        "format": "uuid"
+                    },
+                    "compositionId": {
+                        "type": "string",
+                        "format": "uuid"
+                    },
+                    "compositionTargetId": {
+                        "type": "string",
+                        "format": "uuid"
+                    },
+                    "restarting": {
+                        "type": "boolean"
+                    },
+                    "deployState": {
+                        "type": "string",
+                        "enum": [
+                            "DEPLOYED",
+                            "DEPLOYING",
+                            "UNDEPLOYED",
+                            "UNDEPLOYING",
+                            "DELETING",
+                            "DELETED",
+                            "UPDATING",
+                            "MIGRATING"
+                        ]
+                    },
+                    "lockState": {
+                        "type": "string",
+                        "enum": [
+                            "LOCKED",
+                            "LOCKING",
+                            "UNLOCKED",
+                            "UNLOCKING",
+                            "NONE"
+                        ]
+                    },
+                    "elements": {
+                        "type": "object",
+                        "additionalProperties": {
+                            "$ref": "#/components/schemas/AutomationCompositionElement"
+                        }
+                    },
+                    "stateChangeResult": {
+                        "type": "string",
+                        "enum": [
+                            "NO_ERROR",
+                            "FAILED",
+                            "TIMEOUT"
+                        ]
+                    },
+                    "definedName": {
+                        "type": "string"
+                    },
+                    "definedVersion": {
+                        "type": "string"
+                    },
+                    "typeVersion": {
+                        "type": "string"
+                    },
+                    "key": {
+                        "$ref": "#/components/schemas/ToscaEntityKey"
+                    },
+                    "type": {
+                        "type": "string"
+                    }
+                }
+            },
+            "AutomationCompositionElement": {
+                "type": "object",
+                "properties": {
+                    "id": {
+                        "type": "string",
+                        "format": "uuid"
+                    },
+                    "definition": {
+                        "$ref": "#/components/schemas/ToscaConceptIdentifier"
+                    },
+                    "participantId": {
+                        "type": "string",
+                        "format": "uuid"
+                    },
+                    "restarting": {
+                        "type": "boolean"
+                    },
+                    "deployState": {
+                        "type": "string",
+                        "enum": [
+                            "DEPLOYED",
+                            "DEPLOYING",
+                            "UNDEPLOYED",
+                            "UNDEPLOYING",
+                            "DELETING",
+                            "DELETED",
+                            "UPDATING",
+                            "MIGRATING"
+                        ]
+                    },
+                    "lockState": {
+                        "type": "string",
+                        "enum": [
+                            "LOCKED",
+                            "LOCKING",
+                            "UNLOCKED",
+                            "UNLOCKING",
+                            "NONE"
+                        ]
+                    },
+                    "operationalState": {
+                        "type": "string"
+                    },
+                    "useState": {
+                        "type": "string"
+                    },
+                    "description": {
+                        "type": "string"
+                    },
+                    "message": {
+                        "type": "string"
+                    },
+                    "properties": {
+                        "type": "object",
+                        "additionalProperties": {
+                            "type": "object"
+                        }
+                    },
+                    "outProperties": {
+                        "type": "object",
+                        "additionalProperties": {
+                            "type": "object"
+                        }
+                    }
+                }
+            },
+            "AutomationCompositions": {
+                "type": "object",
+                "properties": {
+                    "automationCompositionList": {
+                        "type": "array",
+                        "items": {
+                            "$ref": "#/components/schemas/AutomationComposition"
+                        }
+                    }
+                }
+            },
+            "ToscaEntityKey": {
+                "type": "object",
+                "properties": {
+                    "name": {
+                        "type": "string"
+                    },
+                    "version": {
+                        "type": "string"
+                    }
+                }
+            },
+            "InternalDatas": {
+                "type": "object",
+                "properties": {
+                    "list": {
+                        "type": "array",
+                        "items": {
+                            "$ref": "#/components/schemas/InternalData"
+                        }
+                    }
                 }
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/docs/clamp/acm/draw.io/acm-participant-sim.drawio b/docs/clamp/acm/draw.io/acm-participant-sim.drawio
new file mode 100644 (file)
index 0000000..5bcab9c
--- /dev/null
@@ -0,0 +1,305 @@
+<mxfile host="app.diagrams.net" modified="2024-04-25T08:32:23.823Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" etag="aqt378V_5LFppGlvXt5Y" version="24.3.0" type="device" pages="2">
+  <diagram name="A1PMS" id="EQz7CeIsnqjb-CRsskzZ">
+    <mxGraphModel dx="2634" dy="738" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
+      <root>
+        <mxCell id="0" />
+        <mxCell id="1" parent="0" />
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-2" value="ACM Runtime" style="rounded=0;whiteSpace=wrap;html=1;fontSize=16;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+          <mxGeometry x="44" y="28" width="156" height="81" as="geometry" />
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-3" value="Kafka" style="rounded=0;whiteSpace=wrap;html=1;fontSize=16;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
+          <mxGeometry x="-175" y="201" width="602" height="39" as="geometry" />
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-4" value="Participant Simulator" style="rounded=0;whiteSpace=wrap;html=1;fontSize=16;fillColor=#e1d5e7;strokeColor=#9673a6;verticalAlign=top;" parent="1" vertex="1">
+          <mxGeometry x="12" y="333" width="243" height="183" as="geometry" />
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-5" value="&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;Automation Composition Element A&lt;/span&gt;&lt;/div&gt;" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fontSize=16;fillColor=#fff2cc;strokeColor=#d6b656;size=15;" parent="1" vertex="1">
+          <mxGeometry x="-558" y="257" width="220" height="53" as="geometry" />
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-10" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" parent="1" source="BEZJXQmxWPO11OeoHs-X-5" target="BEZJXQmxWPO11OeoHs-X-8" edge="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="-8" y="7" as="sourcePoint" />
+            <mxPoint x="37" y="-45.75" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-11" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;entryX=0.318;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.586;exitY=0.057;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" target="BEZJXQmxWPO11OeoHs-X-8" edge="1" source="TKIm4hqrSRE_Ot67SPcm-1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="-669" y="337" as="sourcePoint" />
+            <mxPoint x="-608.2950000000001" y="156.002" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-8" value="Tester (CSIT, Performance Test, User)" style="rounded=0;whiteSpace=wrap;html=1;fontSize=16;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
+          <mxGeometry x="-647" y="25" width="151" height="97" as="geometry" />
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-14" value="Automation Composition Element A" style="rounded=0;whiteSpace=wrap;html=1;fontSize=16;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
+          <mxGeometry x="27" y="378" width="213" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-15" value="Automation Composition Element B" style="rounded=0;whiteSpace=wrap;html=1;fontSize=16;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
+          <mxGeometry x="27" y="450" width="213" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-37" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=0.262;exitY=1.001;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" target="BEZJXQmxWPO11OeoHs-X-39" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="154" y="109" as="sourcePoint" />
+            <mxPoint x="156" y="151" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-38" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;entryX=0.5;entryY=0.5;endSize=6;strokeWidth=1;sketch=0;fontSize=12;curved=1;exitX=0.416;exitY=0.012;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" target="BEZJXQmxWPO11OeoHs-X-39" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="154" y="201" as="sourcePoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-39" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;resizable=0;points=[];outlineConnect=0;sketch=0;fontSize=16;direction=south;fillColor=#B20000;fontColor=#ffffff;strokeColor=#B20000;strokeWidth=2;" parent="1" vertex="1">
+          <mxGeometry x="149" y="150" width="10" height="10" as="geometry" />
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-40" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=0.262;exitY=1.001;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" target="BEZJXQmxWPO11OeoHs-X-42" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="85" y="240" as="sourcePoint" />
+            <mxPoint x="87" y="282" as="targetPoint" />
+            <Array as="points">
+              <mxPoint x="85" y="273" />
+            </Array>
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-41" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;entryX=0.5;entryY=0.5;endSize=6;strokeWidth=1;sketch=0;fontSize=12;curved=1;exitX=0.416;exitY=0.012;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" target="BEZJXQmxWPO11OeoHs-X-42" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="85" y="332" as="sourcePoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-42" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;resizable=0;points=[];outlineConnect=0;sketch=0;fontSize=16;direction=south;fillColor=#B20000;fontColor=#ffffff;strokeColor=#B20000;strokeWidth=2;" parent="1" vertex="1">
+          <mxGeometry x="80" y="281" width="10" height="10" as="geometry" />
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-43" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=0.262;exitY=1.001;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" target="BEZJXQmxWPO11OeoHs-X-45" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="157" y="240" as="sourcePoint" />
+            <mxPoint x="159" y="282" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-44" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;entryX=0.5;entryY=0.5;endSize=6;strokeWidth=1;sketch=0;fontSize=12;curved=1;exitX=0.416;exitY=0.012;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" target="BEZJXQmxWPO11OeoHs-X-45" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="157" y="332" as="sourcePoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-45" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;resizable=0;points=[];outlineConnect=0;sketch=0;fontSize=16;direction=south;fillColor=#B20000;fontColor=#ffffff;strokeColor=#B20000;strokeWidth=2;" parent="1" vertex="1">
+          <mxGeometry x="152" y="281" width="10" height="10" as="geometry" />
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-46" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=0.262;exitY=1.001;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" target="BEZJXQmxWPO11OeoHs-X-48" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="85" y="110" as="sourcePoint" />
+            <mxPoint x="87" y="152" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-47" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;entryX=0.5;entryY=0.5;endSize=6;strokeWidth=1;sketch=0;fontSize=12;curved=1;exitX=0.416;exitY=0.012;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" target="BEZJXQmxWPO11OeoHs-X-48" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="85" y="202" as="sourcePoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-48" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;resizable=0;points=[];outlineConnect=0;sketch=0;fontSize=16;direction=south;fillColor=#B20000;fontColor=#ffffff;strokeColor=#B20000;strokeWidth=2;" parent="1" vertex="1">
+          <mxGeometry x="80" y="151" width="10" height="10" as="geometry" />
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-50" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=-0.009;exitY=0.617;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.993;entryY=0.905;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="BEZJXQmxWPO11OeoHs-X-15" target="BEZJXQmxWPO11OeoHs-X-8" edge="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="256" y="426" as="sourcePoint" />
+            <mxPoint x="413" y="416" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-51" value="REST" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=16;" parent="1" vertex="1">
+          <mxGeometry x="-461.5" y="105" width="61" height="31" as="geometry" />
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-52" value="Instantiation" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=16;" parent="1" vertex="1">
+          <mxGeometry x="-26" y="143" width="104" height="31" as="geometry" />
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-53" value="Instantiation" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=16;" parent="1" vertex="1">
+          <mxGeometry x="-26" y="274" width="104" height="31" as="geometry" />
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-54" value="Monitoring" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=16;" parent="1" vertex="1">
+          <mxGeometry x="159" y="139.5" width="93" height="31" as="geometry" />
+        </mxCell>
+        <mxCell id="BEZJXQmxWPO11OeoHs-X-55" value="Monitoring" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=16;" parent="1" vertex="1">
+          <mxGeometry x="162" y="270.5" width="93" height="31" as="geometry" />
+        </mxCell>
+        <mxCell id="rvGSiY4AJXrMUw3_xQ0a-1" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="BEZJXQmxWPO11OeoHs-X-14" edge="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="250" y="484" as="sourcePoint" />
+            <mxPoint x="-497" y="111" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="TKIm4hqrSRE_Ot67SPcm-1" value="&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;Automation Composition Element B&lt;/span&gt;&lt;/div&gt;" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fontSize=16;fillColor=#f8cecc;strokeColor=#b85450;size=14;" vertex="1" parent="1">
+          <mxGeometry x="-830" y="257" width="220" height="53" as="geometry" />
+        </mxCell>
+        <mxCell id="TKIm4hqrSRE_Ot67SPcm-3" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;" edge="1" parent="1" target="BEZJXQmxWPO11OeoHs-X-8">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="42" y="68" as="sourcePoint" />
+            <mxPoint x="-511" y="64" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="TKIm4hqrSRE_Ot67SPcm-4" value="REST" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=16;" vertex="1" parent="1">
+          <mxGeometry x="-469.5" y="40" width="61" height="31" as="geometry" />
+        </mxCell>
+      </root>
+    </mxGraphModel>
+  </diagram>
+  <diagram id="7EV7rOq7FkkVQS_sMw84" name="Kserve">
+    <mxGraphModel dx="2397" dy="1412" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
+      <root>
+        <mxCell id="0" />
+        <mxCell id="1" parent="0" />
+        <mxCell id="yh-L3AtmC00XoUG_2nvY-11" value="" style="rounded=0;whiteSpace=wrap;html=1;fontSize=16;dashed=1;dashPattern=12 12;" vertex="1" parent="1">
+          <mxGeometry x="-261" y="-213" width="1024" height="778" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-1" value="CLAMP-ACM&lt;br&gt;GUI" style="rounded=0;whiteSpace=wrap;html=1;fontSize=16;fillColor=#b1ddf0;strokeColor=#10739e;" parent="1" vertex="1">
+          <mxGeometry x="47" y="-103" width="153" height="81" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-2" value="Automation Composition Runtime (CLAMP-ACM)" style="rounded=0;whiteSpace=wrap;html=1;fontSize=16;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+          <mxGeometry x="44" y="28" width="156" height="81" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-3" value="Kafka" style="rounded=0;whiteSpace=wrap;html=1;fontSize=16;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
+          <mxGeometry x="-232" y="201" width="760" height="39" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-5" value="Kserve Participant Automation Composition Element Configuration for Automation Composition A&lt;br&gt;&lt;br&gt;- Define Inference Service Entities&lt;br&gt;&amp;nbsp; + Sequence of Inference Services&lt;br&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;- Name&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;- Namespace&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;- Payload&lt;/span&gt;&lt;/div&gt;" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fontSize=16;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
+          <mxGeometry x="-553" y="-227" width="273" height="224" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-6" value="Kserve Participant Automation Composition Element Configuration for Automation Composition B&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;- Define Inference Service Entities&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;&amp;nbsp; + Sequence of Inference Services&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;&lt;div style=&quot;border-color: var(--border-color); text-align: left;&quot;&gt;- Name&lt;/div&gt;&lt;div style=&quot;border-color: var(--border-color); text-align: left;&quot;&gt;&lt;span style=&quot;border-color: var(--border-color); background-color: initial;&quot;&gt;- Namespace&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;border-color: var(--border-color); text-align: left;&quot;&gt;&lt;span style=&quot;border-color: var(--border-color); background-color: initial;&quot;&gt;- Payload&lt;/span&gt;&lt;/div&gt;" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fontSize=16;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
+          <mxGeometry x="-556" y="24" width="274" height="204" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-7" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=0.996;exitY=0.278;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;" parent="1" source="hDoWaCIZZ_nO79t9Hxqc-5" target="hDoWaCIZZ_nO79t9Hxqc-1" edge="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="2" y="-30" as="sourcePoint" />
+            <mxPoint x="52" y="-80" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-8" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=1.022;exitY=0.288;exitDx=0;exitDy=0;exitPerimeter=0;entryX=-0.015;entryY=0.632;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="hDoWaCIZZ_nO79t9Hxqc-6" target="hDoWaCIZZ_nO79t9Hxqc-1" edge="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="-293" y="-157" as="sourcePoint" />
+            <mxPoint x="54" y="-73" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-9" value="" style="endArrow=none;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="hDoWaCIZZ_nO79t9Hxqc-2" target="hDoWaCIZZ_nO79t9Hxqc-1" edge="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="67" y="28" as="sourcePoint" />
+            <mxPoint x="117" y="-22" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-11" value="Inference Service for Automation Composition A" style="rounded=0;whiteSpace=wrap;html=1;fontSize=16;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
+          <mxGeometry x="430" y="352" width="141" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-12" value="Inference Service for Automation Composition B" style="rounded=0;whiteSpace=wrap;html=1;fontSize=16;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
+          <mxGeometry x="591" y="352" width="141" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-15" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=0.262;exitY=1.001;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" target="hDoWaCIZZ_nO79t9Hxqc-17" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="154" y="109" as="sourcePoint" />
+            <mxPoint x="156" y="151" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-16" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;entryX=0.5;entryY=0.5;endSize=6;strokeWidth=1;sketch=0;fontSize=12;curved=1;exitX=0.416;exitY=0.012;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" target="hDoWaCIZZ_nO79t9Hxqc-17" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="154" y="201" as="sourcePoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-17" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;resizable=0;points=[];outlineConnect=0;sketch=0;fontSize=16;direction=south;fillColor=#B20000;fontColor=#ffffff;strokeColor=#B20000;strokeWidth=2;" parent="1" vertex="1">
+          <mxGeometry x="149" y="150" width="10" height="10" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-18" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=0.262;exitY=1.001;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" target="hDoWaCIZZ_nO79t9Hxqc-20" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="85" y="240" as="sourcePoint" />
+            <mxPoint x="87" y="282" as="targetPoint" />
+            <Array as="points">
+              <mxPoint x="85" y="273" />
+            </Array>
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-19" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;entryX=0.5;entryY=0.5;endSize=6;strokeWidth=1;sketch=0;fontSize=12;curved=1;exitX=0.416;exitY=0.012;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" target="hDoWaCIZZ_nO79t9Hxqc-20" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="85" y="332" as="sourcePoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-20" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;resizable=0;points=[];outlineConnect=0;sketch=0;fontSize=16;direction=south;fillColor=#B20000;fontColor=#ffffff;strokeColor=#B20000;strokeWidth=2;" parent="1" vertex="1">
+          <mxGeometry x="80" y="281" width="10" height="10" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-21" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=0.262;exitY=1.001;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" target="hDoWaCIZZ_nO79t9Hxqc-23" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="157" y="240" as="sourcePoint" />
+            <mxPoint x="159" y="282" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-22" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;entryX=0.5;entryY=0.5;endSize=6;strokeWidth=1;sketch=0;fontSize=12;curved=1;exitX=0.416;exitY=0.012;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" target="hDoWaCIZZ_nO79t9Hxqc-23" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="157" y="332" as="sourcePoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-23" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;resizable=0;points=[];outlineConnect=0;sketch=0;fontSize=16;direction=south;fillColor=#B20000;fontColor=#ffffff;strokeColor=#B20000;strokeWidth=2;" parent="1" vertex="1">
+          <mxGeometry x="152" y="281" width="10" height="10" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-24" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=0.262;exitY=1.001;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" target="hDoWaCIZZ_nO79t9Hxqc-26" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="85" y="110" as="sourcePoint" />
+            <mxPoint x="87" y="152" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-25" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;entryX=0.5;entryY=0.5;endSize=6;strokeWidth=1;sketch=0;fontSize=12;curved=1;exitX=0.416;exitY=0.012;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" target="hDoWaCIZZ_nO79t9Hxqc-26" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="85" y="202" as="sourcePoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-26" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;resizable=0;points=[];outlineConnect=0;sketch=0;fontSize=16;direction=south;fillColor=#B20000;fontColor=#ffffff;strokeColor=#B20000;strokeWidth=2;" parent="1" vertex="1">
+          <mxGeometry x="80" y="151" width="10" height="10" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-29" value="Instantiation" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=16;" parent="1" vertex="1">
+          <mxGeometry x="-26" y="143" width="104" height="31" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-30" value="Instantiation" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=16;" parent="1" vertex="1">
+          <mxGeometry x="-26" y="274" width="104" height="31" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-31" value="Monitoring" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=16;" parent="1" vertex="1">
+          <mxGeometry x="159" y="139.5" width="93" height="31" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-32" value="Monitoring" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=16;" parent="1" vertex="1">
+          <mxGeometry x="162" y="270.5" width="93" height="31" as="geometry" />
+        </mxCell>
+        <mxCell id="yh-L3AtmC00XoUG_2nvY-6" style="edgeStyle=none;curved=1;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontSize=12;startSize=8;endSize=8;" edge="1" parent="1" source="hDoWaCIZZ_nO79t9Hxqc-36" target="hDoWaCIZZ_nO79t9Hxqc-12">
+          <mxGeometry relative="1" as="geometry" />
+        </mxCell>
+        <mxCell id="yh-L3AtmC00XoUG_2nvY-7" style="edgeStyle=none;curved=1;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.545;entryY=0.979;entryDx=0;entryDy=0;entryPerimeter=0;fontSize=12;startSize=8;endSize=8;" edge="1" parent="1" source="hDoWaCIZZ_nO79t9Hxqc-36" target="hDoWaCIZZ_nO79t9Hxqc-11">
+          <mxGeometry relative="1" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-36" value="Kserve" style="rounded=0;whiteSpace=wrap;html=1;fontSize=16;fillColor=#b0e3e6;strokeColor=#0e8088;" parent="1" vertex="1">
+          <mxGeometry x="511" y="453" width="141" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="yh-L3AtmC00XoUG_2nvY-2" value="" style="group" vertex="1" connectable="0" parent="1">
+          <mxGeometry x="8" y="333" width="243" height="183" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-4" value="" style="rounded=0;whiteSpace=wrap;html=1;fontSize=16;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="yh-L3AtmC00XoUG_2nvY-2" vertex="1">
+          <mxGeometry width="243" height="183" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-38" value="Kserve Paricipant" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=16;" parent="yh-L3AtmC00XoUG_2nvY-2" vertex="1">
+          <mxGeometry x="45" width="143" height="31" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-13" value="Kserve Automation Composition Element for Automation Composition A" style="rounded=0;whiteSpace=wrap;html=1;fontSize=16;fillColor=#fff2cc;strokeColor=#d6b656;" parent="yh-L3AtmC00XoUG_2nvY-2" vertex="1">
+          <mxGeometry x="15" y="31" width="213" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="hDoWaCIZZ_nO79t9Hxqc-14" value="Kserve Automation Composition Element for Automation Composition B" style="rounded=0;whiteSpace=wrap;html=1;fontSize=16;fillColor=#f8cecc;strokeColor=#b85450;" parent="yh-L3AtmC00XoUG_2nvY-2" vertex="1">
+          <mxGeometry x="15.5" y="103" width="210.5" height="62" as="geometry" />
+        </mxCell>
+        <mxCell id="yh-L3AtmC00XoUG_2nvY-5" style="edgeStyle=none;curved=1;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontSize=12;startSize=8;endSize=8;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" target="hDoWaCIZZ_nO79t9Hxqc-36">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="388" y="423" as="sourcePoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="yh-L3AtmC00XoUG_2nvY-3" value="K8s API" style="sketch=0;html=1;dashed=0;whitespace=wrap;fillColor=#2875E2;strokeColor=#ffffff;points=[[0.005,0.63,0],[0.1,0.2,0],[0.9,0.2,0],[0.5,0,0],[0.995,0.63,0],[0.72,0.99,0],[0.5,1,0],[0.28,0.99,0]];verticalLabelPosition=bottom;align=center;verticalAlign=top;shape=mxgraph.kubernetes.icon;prIcon=api;fontSize=16;" vertex="1" parent="1">
+          <mxGeometry x="299" y="377" width="122" height="83" as="geometry" />
+        </mxCell>
+        <mxCell id="yh-L3AtmC00XoUG_2nvY-9" style="edgeStyle=none;curved=1;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontSize=12;startSize=8;endSize=8;" edge="1" parent="1" source="hDoWaCIZZ_nO79t9Hxqc-4">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="322" y="425" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="yh-L3AtmC00XoUG_2nvY-10" value="REST" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=16;" vertex="1" parent="1">
+          <mxGeometry x="252" y="393" width="61" height="31" as="geometry" />
+        </mxCell>
+        <mxCell id="yh-L3AtmC00XoUG_2nvY-12" value="K8s Cluster" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=16;" vertex="1" parent="1">
+          <mxGeometry x="646" y="-200" width="101" height="31" as="geometry" />
+        </mxCell>
+      </root>
+    </mxGraphModel>
+  </diagram>
+</mxfile>
diff --git a/docs/clamp/acm/images/participants/sim-participant.png b/docs/clamp/acm/images/participants/sim-participant.png
new file mode 100644 (file)
index 0000000..8ceabb1
Binary files /dev/null and b/docs/clamp/acm/images/participants/sim-participant.png differ
index 0b8061e..ad37776 100644 (file)
@@ -26,92 +26,71 @@ The procedure documented in this article has been verified using Ubuntu 20.04 LT
 
 2.1 Prerequisites
 =================
-- Java 11
+- Java 17
 - Docker
-- Maven 3
+- Maven 3.9
 - Git
 - helm3
 - k8s cluster
 - Refer to this guide for basic environment setup `Setting up dev environment <https://wiki.onap.org/display/DW/Setting+Up+Your+Development+Environment>`_
 
-2.2 Assumptions
-===============
-- You are accessing the policy repositories through gerrit.
+2.2 Cloning CLAMP automation composition
+========================================
 
-The following repositories are required for development in this project. These repositories should be present on your machine and you should run "mvn clean install" on all of them so that the packages are present in your .m2 repository.
+Run a script such as the script below to clone the required modules from the `ONAP git repository <https://gerrit.onap.org/r/admin/repos/q/filter:policy>`_. This script clones CLAMP automation composition and all dependency.
 
-- policy/parent
-- policy/common
-- policy/models
-- policy/clamp
+.. code-block:: bash
 
-In this setup guide, we will be setting up all the components technically required for a working dev environment.
+    cd ~/git
+    git clone https://gerrit.onap.org/r/policy/clamp clamp
 
-2.3 Setting up the components
-=============================
 
-2.3.1 MariaDB Setup
-^^^^^^^^^^^^^^^^^^^
-We will be using Docker to run our mariadb instance. It will have the acm-runtime database running in it.
+Execution of the command above results in the following directory hierarchy in your *~/git* directory:
 
-- AutomationComposition: the runtime-acm db
+    *  ~/git/clamp
 
-The easiest way to do this is to perform a SQL script. Create the *mariadb.sql* file in the directory *~/git*.
 
-.. code-block:: mysql
+2.3 Setting up the components
+=============================
 
-    CREATE DATABASE `clampacm`;
-    USE `clampacm`;
-    CREATE USER 'policy';
-    GRANT ALL on clampacm.* to 'policy' identified by 'P01icY' with GRANT OPTION;
+2.3.1 Running MariaDb and Kafka
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+We will be using Docker to run our mariadb instance and Kafka. It will have the acm-runtime database running in it.
+The easiest way to do this is to perform a SQL script. Create the *mariadb.sql* file in the directory *~/git*.
 
-Execution of the command above results in the creation and start of the *mariadb-smoke-test* container.
+.. literalinclude:: files/mariadb.sql
+   :language: SQL
 
-    .. code-block:: bash
+Create the '*docker-compose.yaml*' using following code:
 
-       cd ~/git
-       docker run --name mariadb-smoke-test  \
-        -p 3306:3306 \
-        -e MYSQL_ROOT_PASSWORD=my-secret-pw  \
-        --mount type=bind,source=$HOME/git/mariadb.sql,target=/docker-entrypoint-initdb.d/data.sql \
-        -d mariadb:10.10.2 \
-        --lower-case-table-names=1
+.. literalinclude:: files/docker-compose-local.yaml
+   :language: yaml
 
-The database will be exposed locally on port 3306 and will be backed by an anonymous docker volume.
+Run the docker composition:
 
-2.3.2 DMAAP Simulator
-^^^^^^^^^^^^^^^^^^^^^
-For convenience, a dmaap simulator has been provided in the policy/models repository. To start the simulator, you can do the following:
+   .. code-block:: bash
 
-1. Navigate to /models-sim/policy-models-simulators in the policy/models repository.
-2. Add a configuration file to src/test/resources with the following contents:
+      cd ~/git/
+      docker compose up
 
-.. code-block:: json
+2.3.2 Setting topicParameterGroup for kafka localhost
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+It needs to set 'kafka' as topicCommInfrastructure and 'localhost:29092' as server.
+In the clamp repo, you should find the file 'runtime-acm/src/main/resources/application.yaml'. This file (in the 'runtime' parameters section) may need to be altered as below:
 
-    {
-       "dmaapProvider":{
-          "name":"DMaaP simulator",
-          "topicSweepSec":900
-       },
-       "restServers":[
-          {
-             "name":"DMaaP simulator",
-             "providerClass":"org.onap.policy.models.sim.dmaap.rest.DmaapSimRestControllerV1",
-             "host":"localhost",
-             "port":3904,
-             "https":false
-          }
-       ]
-    }
-
-3. You can then start dmaap with:
+.. literalinclude:: files/runtime-application.yaml
+   :language: yaml
 
-.. code-block:: bash
+Same changes (in the 'participant' parameters section)
+may need to be apply into the file 'participant/participant-impl/participant-impl-http/src/main/resources/config/application.yaml'.
 
-    mvn exec:java  -Dexec.mainClass=org.onap.policy.models.simulators.Main -Dexec.args="src/test/resources/YOUR_CONF_FILE.json"
+.. literalinclude:: files/participant-http-application.yaml
+   :language: yaml
 
-At this stage the dmaap simulator should be running on your local machine on port 3904.
+And into the file 'participant/participant-impl/participant-impl-kubernetes/src/main/resources/config/application.yaml'.
 
+.. literalinclude:: files/participant-kubernetes-application.yaml
+   :language: yaml
 
 2.3.3 Automation composition Runtime
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -245,7 +224,7 @@ Verify automation composition state:
    GET: https://<Runtime ACM IP> : <Port>/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}
 
 
-3.4 Automation Compositions can be "UNDEPLOYED" after deployment
+3.5 Automation Compositions can be "UNDEPLOYED" after deployment
 ================================================================
 
 By changing the state to "UNDEPLOYED", all the helm deployments under the corresponding automation composition will be uninstalled from the cluster.
index 52275be..95a27ee 100644 (file)
@@ -23,9 +23,9 @@ Linux user - although the majority of the steps show will be exactly the same in
 2.1 Prerequisites
 =================
 
-- Java 11
+- Java 17
 - Docker
-- Maven 3
+- Maven 3.9
 - Git
 - Refer to this guide for basic environment setup `Setting up dev environment <https://wiki.onap.org/display/DW/Setting+Up+Your+Development+Environment>`_
 
@@ -34,7 +34,7 @@ Linux user - although the majority of the steps show will be exactly the same in
 
 - Automation Composition runtime component docker image is started and running.
 - Participant docker images policy-clamp-ac-pf-ppnt, policy-clamp-ac-http-ppnt, policy-clamp-ac-k8s-ppnt are started and running.
-- Dmaap simulator for communication between components.
+- Kafka/Zookeeper for communication between components.
 - mariadb docker container for policy and clampacm database.
 - policy-api for communication between policy participant and policy-framework
 
index 19f4a21..2f4a7c9 100644 (file)
@@ -24,240 +24,81 @@ This article assumes that:
 
 The procedure documented in this article has been verified using Ubuntu 20.04 LTS VM.
 
-Cloning CLAMP automation composition and all dependency
-*******************************************************
+Cloning CLAMP automation composition
+************************************
 
 Run a script such as the script below to clone the required modules from the `ONAP git repository <https://gerrit.onap.org/r/admin/repos/q/filter:policy>`_. This script clones CLAMP automation composition and all dependency.
 
-ONAP Policy Framework has dependencies to the ONAP Parent *oparent* module, the ONAP ECOMP SDK *ecompsdkos* module, and the A&AI Schema module.
-
-
 .. code-block:: bash
-   :caption: Typical ONAP Policy Framework Clone Script
-   :linenos:
-
-    #!/usr/bin/env bash
-
-    ## script name for output
-    MOD_SCRIPT_NAME='basename $0'
-
-    ## the ONAP clone directory, defaults to "onap"
-    clone_dir="onap"
-
-    ## the ONAP repos to clone
-    onap_repos="\
-    policy/parent \
-    policy/common \
-    policy/models \
-    policy/clamp "
-
-    ##
-    ## Help screen and exit condition (i.e. too few arguments)
-    ##
-    Help()
-    {
-        echo ""
-        echo "$MOD_SCRIPT_NAME - clones all required ONAP git repositories"
-        echo ""
-        echo "       Usage:  $MOD_SCRIPT_NAME [-options]"
-        echo ""
-        echo "       Options"
-        echo "         -d          - the ONAP clone directory, defaults to '.'"
-        echo "         -h          - this help screen"
-        echo ""
-        exit 255;
-    }
-
-    ##
-    ## read command line
-    ##
-    while [ $# -gt 0 ]
-    do
-        case $1 in
-            #-d ONAP clone directory
-            -d)
-                shift
-                if [ -z "$1" ]; then
-                    echo "$MOD_SCRIPT_NAME: no clone directory"
-                    exit 1
-                fi
-                clone_dir=$1
-                shift
-            ;;
-
-            #-h prints help and exists
-            -h)
-                Help;exit 0;;
-
-            *)    echo "$MOD_SCRIPT_NAME: undefined CLI option - $1"; exit 255;;
-        esac
-    done
-
-    if [ -f "$clone_dir" ]; then
-        echo "$MOD_SCRIPT_NAME: requested clone directory '$clone_dir' exists as file"
-        exit 2
-    fi
-    if [ -d "$clone_dir" ]; then
-        echo "$MOD_SCRIPT_NAME: requested clone directory '$clone_dir' exists as directory"
-        exit 2
-    fi
-
-    mkdir $clone_dir
-    if [ $? != 0 ]
-    then
-        echo cannot clone ONAP repositories, could not create directory '"'$clone_dir'"'
-        exit 3
-    fi
-
-    for repo in $onap_repos
-    do
-        repoDir=`dirname "$repo"`
-        repoName=`basename "$repo"`
-
-        if [ ! -z $dirName ]
-        then
-            mkdir "$clone_dir/$repoDir"
-            if [ $? != 0 ]
-            then
-                echo cannot clone ONAP repositories, could not create directory '"'$clone_dir/repoDir'"'
-                exit 4
-            fi
-        fi
-
-        git clone https://gerrit.onap.org/r/${repo} $clone_dir/$repo
-    done
-
-    echo ONAP has been cloned into '"'$clone_dir'"'
-
-
-Execution of the script above results in the following directory hierarchy in your *~/git* directory:
-
-    *  ~/git/onap
-    *  ~/git/onap/policy
-    *  ~/git/onap/policy/parent
-    *  ~/git/onap/policy/common
-    *  ~/git/onap/policy/models
-    *  ~/git/onap/policy/clamp
-
-
-Building CLAMP automation composition and all dependency
-********************************************************
-
-**Step 1:** Optionally, for a completely clean build, remove the ONAP built modules from your local repository.
-
-    .. code-block:: bash
-
-        rm -fr ~/.m2/repository/org/onap
 
+    cd ~/git
+    git clone https://gerrit.onap.org/r/policy/clamp clamp
 
-**Step 2:**  A pom such as the one below can be used to build the ONAP Policy Framework modules. Create the *pom.xml* file in the directory *~/git/onap/policy*.
 
-.. code-block:: xml
-  :caption: Typical pom.xml to build the ONAP Policy Framework
-  :linenos:
+Execution of the command above results in the following directory hierarchy in your *~/git* directory:
 
-    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-        <modelVersion>4.0.0</modelVersion>
-        <groupId>org.onap</groupId>
-        <artifactId>onap-policy</artifactId>
-        <version>1.0.0-SNAPSHOT</version>
-        <packaging>pom</packaging>
-        <name>${project.artifactId}</name>
-        <inceptionYear>2023</inceptionYear>
-        <organization>
-            <name>ONAP</name>
-        </organization>
+    *  ~/git/clamp
 
-        <modules>
-            <module>parent</module>
-            <module>common</module>
-            <module>models</module>
-            <module>clamp</module>
-        </modules>
-    </project>
 
+Building CLAMP automation composition
+*************************************
 
-**Step 3:** You can now build the Policy framework.
+**Step 1:** Setting topicParameterGroup for kafka localhost.
+It needs to set 'kafka' as topicCommInfrastructure and 'localhost:29092' as server.
+In the clamp repo, you should find the file 'runtime-acm/src/main/resources/application.yaml'. This file (in the 'runtime' parameters section) may need to be altered as below:
 
-Build java artifacts only:
+.. literalinclude:: files/runtime-application.yaml
+   :language: yaml
 
-    .. code-block:: bash
+Same changes (in the 'participant' parameters section) may need to be apply into the file 'participant/participant-impl/participant-impl-simulator/src/main/resources/config/application.yaml'.
 
-       cd ~/git/onap/policy
-       mvn clean install
+.. literalinclude:: files/participant-sim-application.yaml
+   :language: yaml
 
-Build with docker images:
+**Step 2:** Optionally, for a completely clean build, remove the ONAP built modules from your local repository.
 
     .. code-block:: bash
 
-       cd ~/git/onap/policy/clamp/packages/
-       mvn clean install -P docker
-
-       cd ~/git/onap/policy/models/models-sim/packages
-       mvn clean install -P docker
-
-Running MariaDb and DMaaP Simulator
-***********************************
-
-Running a MariaDb Instance
-++++++++++++++++++++++++++
+        rm -fr ~/.m2/repository/org/onap
 
-Assuming you have successfully built the codebase using the instructions above. There are two requirements for the Clamp automation composition component to run, one of them is a
-running MariaDb database instance. The easiest way to do this is to run the docker image locally.
 
-A sql such as the one below can be used to build the SQL initialization. Create the *mariadb.sql* file in the directory *~/git*.
+**Step 3:** You can now build the Policy framework.
 
-    .. code-block:: SQL
+Build java artifacts only:
 
-       create database clampacm;
-       CREATE USER 'policy'@'%' IDENTIFIED BY 'P01icY';
-       GRANT ALL PRIVILEGES ON clampacm.* TO 'policy'@'%';
+    .. code-block:: bash
 
+       cd ~/git/clamp
+       mvn clean install -DskipTests
 
-Execution of the command above results in the creation and start of the *mariadb-smoke-test* container.
+Build with docker images:
 
     .. code-block:: bash
 
-       cd ~/git
-       docker run --name mariadb-smoke-test  \
-        -p 3306:3306 \
-        -e MYSQL_ROOT_PASSWORD=my-secret-pw  \
-        --mount type=bind,source=$HOME/git/mariadb.sql,target=/docker-entrypoint-initdb.d/data.sql \
-        -d mariadb:10.10.2 \
-        --lower-case-table-names=1
+       cd ~/git/clamp/packages/
+       mvn clean install -P docker
 
+Running MariaDb and Kafka
+*************************
 
-Running the DMaaP Simulator during Development
-++++++++++++++++++++++++++++++++++++++++++++++
-The second requirement for the Clamp automation composition component to run is to run the DMaaP simulator. You can run it from the command line using Maven.
+Assuming you have successfully built the codebase using the instructions above. There are two requirements for the Clamp automation composition component to run, MariaDb database and Kafka/Zookeeper. The easiest way to do this is to run a docker compose locally.
 
+A sql such as the one below can be used to build the SQL initialization. Create the *mariadb.sql* file in the directory *~/git*.
 
-Create a new configuration file *~/git/onap/policy/models/models-sim/policy-models-simulators/src/test/resources/newParameters.json* using the below code:
+.. literalinclude:: files/mariadb.sql
+   :language: SQL
 
-.. code-block:: json
+Create the '*docker-compose.yaml*' using following code:
 
-   {
-     "dmaapProvider": {
-       "name": "DMaaP simulator",
-       "topicSweepSec": 900
-     },
-     "restServers": [
-       {
-         "name": "DMaaP simulator",
-         "providerClass": "org.onap.policy.models.sim.dmaap.rest.DmaapSimRestControllerV1",
-         "host": "localhost",
-         "port": 3904,
-         "https": false
-       }
-     ]
-   }
+.. literalinclude:: files/docker-compose-local.yaml
+   :language: yaml
 
-Run the following commands:
+Run the docker composition:
 
    .. code-block:: bash
 
-      cd ~/git/onap/policy/models/models-sim/policy-models-simulators
-      mvn exec:java  -Dexec.mainClass=org.onap.policy.models.simulators.Main -Dexec.args="src/test/resources/newParameters.json"
+      cd ~/git/
+      docker compose up
 
 
 Developing and Debugging CLAMP automation composition
@@ -270,7 +111,7 @@ Once the mariadb and DMaap simulator are up and running, run the following comma
 
    .. code-block:: bash
 
-      cd ~/git/onap/policy/clamp/runtime-acm
+      cd ~/git/clamp/runtime-acm
       mvn spring-boot:run
 
 
@@ -279,84 +120,103 @@ Running on the Command Line
 
    .. code-block:: bash
 
-      cd ~/git/onap/policy/clamp/runtime-acm
-      java -jar target/policy-clamp-runtime-acm-6.4.2-SNAPSHOT.jar
-
-
-Running in Eclipse
-++++++++++++++++++
-
-1. Check out the policy models repository
-2. Go to the *policy-clamp-runtime-acm* module in the clamp repo
-3. Where necessary Add as Source Folder 'target/generated-sources/swagger'
-4. Specify a run configuration using the class *org.onap.policy.clamp.acm.runtime.Application* as the main class
-5. Run the configuration
-
-Swagger UI of Automation composition is available at *http://localhost:6969/onap/policy/clamp/acm/swagger-ui/index.html*
+      cd ~/git/clamp/runtime-acm
+      java -jar target/policy-clamp-runtime-acm-7.1.3-SNAPSHOT.jar
 
 
-Running one or more participants
-++++++++++++++++++++++++++++++++
-
-Into :ref:`HTTP Participant <clamp-acm-http-participant>` you can find a test case with http-participant.
+Running participant simulator
++++++++++++++++++++++++++++++
 
 Run the following commands:
 
    .. code-block:: bash
 
-      cd ~/git/onap/policy/clamp/participant/participant-impl/participant-impl-http
-      java -jar target/policy-clamp-participant-impl-http-6.4.2-SNAPSHOT.jar
+      cd ~/git/clamp/participant/participant-impl/participant-impl-simulator
+      java -jar target/policy-clamp-participant-impl-simulator-7.1.3-SNAPSHOT.jar
 
 
 Running the CLAMP automation composition docker image
 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 
-Create the '*docker-composition.yaml*' using following code:
+Create the '*docker-compose.yaml*' using following code:
 
    .. code-block:: yaml
 
-      version: '3.1'
-
       services:
         mariadb:
           image: mariadb:10.10.2
+          command: ['mysqld', '--lower_case_table_names=1']
           volumes:
             - type: bind
               source: ./mariadb.sql
               target: /docker-entrypoint-initdb.d/data.sql
           environment:
             - MYSQL_ROOT_PASSWORD=my-secret-pw
-            - lower-case-table-names=1
           ports:
             - "3306:3306"
 
+        zookeeper:
+          image: confluentinc/cp-zookeeper:latest
+          environment:
+            ZOOKEEPER_CLIENT_PORT: 2181
+            ZOOKEEPER_TICK_TIME: 2000
+          ports:
+            - 2181:2181
+        kafka:
+          image: confluentinc/cp-kafka:latest
+          container_name: kafka
+          depends_on:
+            - zookeeper
+          ports:
+            - 29092:29092
+            - 9092:9092
+          environment:
+            KAFKA_BROKER_ID: 1
+            KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
+            KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
+            KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
+            KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
+            KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
+
         runtime-acm:
           image: onap/policy-clamp-runtime-acm
+          depends_on:
+            - zookeeper
+            - kafka
+            - mariadb
           environment:
-            - mariadb.host=mariadb
-            - topicServer=message-router
+            MARIADB_HOST: mariadb
+            TOPICSERVER: kafka:9092
+            SERVER_SSL_ENABLED: false
           volumes:
             - type: bind
-              source: ./onap/policy/clamp/runtime-acm/src/main/resources/application.yaml
+              source: ./clamp/runtime-acm/src/main/resources/application.yaml
               target: /opt/app/policy/clamp/etc/AcRuntimeParameters.yaml
           ports:
             - "6969:6969"
 
-        message-router:
-          image: onap/policy-models-simulator
+        participant-simulator:
+          image: onap/policy-clamp-ac-sim-ppnt
+          depends_on:
+            - zookeeper
+            - kafka
+          environment:
+            MARIADB_HOST: mariadb
+            TOPICSERVER: kafka:9092
+            SERVER_SSL_ENABLED: false
           volumes:
             - type: bind
-              source: ./onap/policy/models/models-sim/policy-models-simulators/src/test/resources/newParameters.json
-              target: /opt/app/policy/simulators/etc/mounted/simParameters.json
-          ports:
-            - "3904:3904"
+              source: ./clamp/participant/participant-impl/participant-impl-simulator/src/main/resources/config/application.yaml
+              target: /opt/app/policy/clamp/etc/SimulatorParticipantParameters.yaml
+         ports:
+           - "8085:8085"
 
 Run the docker composition:
 
    .. code-block:: bash
 
       cd ~/git/
-      docker-compose up
+      docker compose up
 
 
 Swagger UI of automation composition is available at *http://localhost:6969/onap/policy/clamp/acm/swagger-ui/index.html*
index c0e3cb1..ad57ee1 100644 (file)
 Policy Distribution Smoke Test
 ################################
 
-The policy-distribution smoke testing is executed against a custom ONAP docker installation as defined in the docker compose file in "policy/docker/csit/".
+The policy-distribution smoke testing is executed against a custom ONAP docker or Kubernetes installation as defined in the docker compose file in "policy/docker/csit/".
 The policy-distribution configuration file is located in "docker/csit/config/distribution/".
-This test verifies the execution of the REST api's exposed by the component to make sure the CSAR Decoding and Forwarding works as expected.
+This test verifies the execution of the REST API's exposed by the component to make sure the CSAR Decoding and Forwarding works as expected.
+Also, the deployment of the policy is checked automatically. An event is then sent to the deployed policy, and thus, its correct operation is verified.
 
-General Setup
-*****************
-In policy/docker/csit/
-
-.. code-block:: bash
-
-    ./start-grafana.sh distribution
-
-This script will compose the ONAP components used during the smoke tests are:
-
-- Policy API to perform CRUD of policies.
-- Policy DB to store the policies, and DB Migrator to start the db.
-- DMAAP Simulator for the communication between components.
-- Policy PAP to perform runtime administration (deploy/undeploy/status/statistics/etc).
-- Policy Apex-PDP to deploy & undeploy policies. And send heartbeats to PAP.
-- Policy Drools-PDP to deploy & undeploy policies. And send heartbeats to PAP.
-- Policy Xacml-PDP to deploy & undeploy policies. And send heartbeats to PAP.
-
-- Policy Distribution to test the Decoding and Forwarding functions.
-
-Use this script to easily bring down the containers :
-
-.. code-block:: bash
-
-    ./stop-grafana.sh
-
-Testing procedure
-**********************
-
-The test set is focused on the following use cases:
-
-- Wait until Distribution starts and reach the built-in REST endpoints for fetching healthcheck & statistics.
-- Execute some of the REST api's exposed by policy-pap component.
-
-Starting Policy Distribution
-------------------------------------
-
-Check the docker logs to see when Distribution service is up and running.
-
-Get the ips of distribution and pap services:
+There are 2 alternative ways to carry out the tests. In Docker and in Kubernetes
 
-.. code::
-  :number-lines:
+Docker Setup
+************
+In policy/docker/csit/
 
-    ./get-instance-ip.sh policy-distribution
-       ./get-instance-ip.sh policy-pap
+More detailed setup for docker CSIT is here
 
-Health check status & statistical data of running distribution system.
+`Policy CSIT Test Install Docker <https://docs.onap.org/projects/onap-policy-parent/en/latest/development/devtools/testing/csit.html>`_
 
 .. code-block:: bash
 
-       curl -u 'healthcheck:zb!XztG34' --basic http://{POLICY_DISTRIBUTION_IP}:6969/healthcheck
-       curl -u 'healthcheck:zb!XztG34' --basic http://{POLICY_DISTRIBUTION_IP}:6969/statistics
-
-Expected result for healthcheck
-
-.. code-block:: json
-
-       {"name":"Policy SSD","url":"policy-distribution","healthy":true,"code":200,"message":"alive"}
-
-Expected result for statistics
+    ./run-project-csit.sh distribution
 
-.. code-block:: json
+This script will do the following:
 
-       {"code":200,"totalDistributionCount":0,"distributionSuccessCount":0,"distributionFailureCount":0,"totalDownloadCount":0,"downloadSuccessCount":0,"downloadFailureCount":0}
+- Deploys all required components - including api, pap and distribution
+- Runs distributions CSIT tests. These tests:
 
-Trigger Policy Distribution Core
-------------------------------------------
+    - Take a policy from a CSAR file in distribution.
+    - Distribution sends and deploys it in API and PAP.
+    - Send an event to the deployed policy - if the policy is NOT deployed successfully, this will FAIL with a 404.
 
-In order to test policy-distribution, we need to trigger the decoding copying a .csar in the mapped volume,
-defined in the docker-compose-distribution-smoke.yml as :
+- Takes down all the components.
+- Saves the results in a .html file in the csit/archives/distribution directory
+- Saves the docker compose logs in the same directory
 
-.. code-block:: yaml
-
-      volumes:
-       - ./distribution/config/temp/:/opt/app/policy/distribution/etc/temp/
-
-So now copy the "sample_csar_with_apex_policy.csar" from ./distribution/config/csar/ to ./distribution/config/temp/
-
-If the commissioning is successful we should see from the logs this message
+K8S Setup
+*********
+In policy/docker/csit/
 
-.. image:: images/message-commissioning-participant.png
+More detailed setup for K8S CSIT is here
 
-So if we check the distribution statistics again
+`Policy CSIT Test Install Kubernetes <https://docs.onap.org/projects/onap-policy-parent/en/latest/development/devtools/testing/csit.html>`_
 
 .. code-block:: bash
 
-       {"code":200,"totalDistributionCount":1,"distributionSuccessCount":1,"distributionFailureCount":0,"totalDownloadCount":1,"downloadSuccessCount":1,"downloadFailureCount":0}
+    ./run-k8s-csit.sh install distribution
 
-Execute policy-pap testing
-------------------------------------
-.. note::
-       The user for pap is different.
+This script will do the following:
 
-Check the details of policies deployed
+- Installs microk8s and configures it.
+- Deploys all required components - including api, pap and distribution as helm charts
+- Waits for all the charts to come up
+- Runs distributions CSIT tests. These tests:
 
-.. code-block:: bash
-
-       curl -k --user 'policyadmin:zb!XztG34' http://{POLICY_PAP_IP}:6969/policy/pap/v1/policies/status
-
-Expected SUCCESS result
-
-.. code-block:: json
+    - Take a policy from a CSAR file in distribution.
+    - Distribution sends and deploys it in API and PAP.
+    - Sends an event to the deployed policy - if the policy is NOT deployed successfully, this will FAIL with a 404.
 
-       [{"pdpGroup":"defaultGroup","pdpType":"apex","pdpId":"apex-91fa25a1-0456-42fa-9556-6a4d2bd613fc","policy":{"name":"operational.apex.sampledomain","version":"1.0.0"},"policyType":{"name":"onap.policies.native.Apex","version":"1.0.0"},"deploy":true,"state":"SUCCESS"},{"pdpGroup":"defaultGroup","pdpType":"xacml","pdpId":"xacml-83e19452-0854-41dd-9f17-8b0a68f11813","policy":{"name":"SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP","version":"1.0.0"},"policyType":{"name":"onap.policies.Naming","version":"1.0.0"},"deploy":true,"state":"SUCCESS"}]
+- Saves the results in a .html file in the csit/archives/distribution directory
+- The pods are not automatically taken down.
 
-Check number of policies deployed
+To uninstall policy helm deployment and/or the microk8s cluster, use `run-k8s-csit.sh`
 
 .. code-block:: bash
 
-       curl -k --user 'policyadmin:zb!XztG34' http://{POLICY_PAP_IP}:6969/policy/pap/v1/policies/deployed
-
-Expected success-count result
-
-.. code-block:: json
-
-       [{"policy-type":"onap.policies.native.Apex","policy-type-version":"1.0.0","policy-id":"operational.apex.sampledomain","policy-version":"1.0.0","success-count":1,"failure-count":0,"incomplete-count":0},{"policy-type":"onap.policies.Naming","policy-type-version":"1.0.0","policy-id":"SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP","policy-version":"1.0.0","success-count":1,"failure-count":0,"incomplete-count":0}]
-
-Or download & execute the steps in postman collection for verifying policy-pap component.
-The steps need to be performed sequentially one after another. And no input is required from user.
+  # to uninstall deployment
+  ./run-k8s-csit.sh uninstall
 
-`Policy Framework Administration API <https://github.com/onap/policy-pap/blob/master/postman/pap-api-collection.json>`_
+  # to remove cluster
+  ./run-k8s-csit.sh clean
 
-Make sure to execute the delete steps in order to clean the setup after testing.
+End of document
\ No newline at end of file
diff --git a/docs/development/devtools/smoke/files/api-application.yaml b/docs/development/devtools/smoke/files/api-application.yaml
new file mode 100644 (file)
index 0000000..39f1de5
--- /dev/null
@@ -0,0 +1,23 @@
+spring:
+  profiles:
+    active: default
+  security.user:
+    name: policyadmin
+    password: zb!XztG34
+  mvc.converters.preferred-json-mapper: gson
+  datasource:
+    url: jdbc:mariadb://localhost:3306/policyadmin
+    driverClassName: org.mariadb.jdbc.Driver
+    username: policy_user
+    password: policy_user
+  jpa:
+    hibernate:
+      ddl-auto: none
+      naming:
+        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
+        implicit-strategy: org.onap.policy.common.spring.utils.CustomImplicitNamingStrategy
+
+server:
+  port: 6968
+  servlet:
+    context-path: /policy/api/v1
diff --git a/docs/development/devtools/smoke/files/docker-compose-local.yaml b/docs/development/devtools/smoke/files/docker-compose-local.yaml
new file mode 100644 (file)
index 0000000..5ee39f6
--- /dev/null
@@ -0,0 +1,36 @@
+services:
+  mariadb:
+    image: mariadb:10.10.2
+    command: ['mysqld', '--lower_case_table_names=1']
+    volumes:
+      - type: bind
+        source: ./mariadb.sql
+        target: /docker-entrypoint-initdb.d/data.sql
+    environment:
+      - MYSQL_ROOT_PASSWORD=my-secret-pw
+    ports:
+      - "3306:3306"
+
+  zookeeper:
+    image: confluentinc/cp-zookeeper:latest
+    environment:
+      ZOOKEEPER_CLIENT_PORT: 2181
+      ZOOKEEPER_TICK_TIME: 2000
+    ports:
+      - 2181:2181
+
+  kafka:
+    image: confluentinc/cp-kafka:latest
+    container_name: kafka
+    depends_on:
+      - zookeeper
+    ports:
+      - 29092:29092
+      - 9092:9092
+    environment:
+      KAFKA_BROKER_ID: 1
+      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
+      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
+      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
+      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
+      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
diff --git a/docs/development/devtools/smoke/files/docker-compose-policy.yaml b/docs/development/devtools/smoke/files/docker-compose-policy.yaml
new file mode 100644 (file)
index 0000000..cdb50eb
--- /dev/null
@@ -0,0 +1,61 @@
+services:
+  mariadb:
+    image: mariadb:10.10.2
+    command: ['mysqld', '--lower_case_table_names=1']
+    volumes:
+      - type: bind
+        source: ./mariadb.sql
+        target: /docker-entrypoint-initdb.d/data.sql
+    environment:
+      - MYSQL_ROOT_PASSWORD=my-secret-pw
+    ports:
+      - "3306:3306"
+
+  policy-db-migrator:
+    image: nexus3.onap.org:10001/onap/policy-db-migrator:3.1.3-SNAPSHOT
+    container_name: policy-db-migrator
+    hostname: policy-db-migrator
+    depends_on:
+      - mariadb
+    expose:
+      - 6824
+    environment:
+      SQL_DB: policyadmin
+      SQL_HOST: mariadb
+      MYSQL_ROOT_PASSWORD: my-secret-pw
+      MYSQL_USER: policy_user
+      MYSQL_PASSWORD: policy_user
+      MYSQL_CMD: mysql
+    volumes:
+      - ./init.sh:/opt/app/policy/bin/db_migrator_policy_init.sh:ro
+      - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro
+    entrypoint: /opt/app/policy/bin/wait_for_port.sh
+    command: [
+      '-c',
+      '/opt/app/policy/bin/db_migrator_policy_init.sh',
+      'mariadb', '3306'
+    ]
+
+  zookeeper:
+    image: confluentinc/cp-zookeeper:latest
+    environment:
+      ZOOKEEPER_CLIENT_PORT: 2181
+      ZOOKEEPER_TICK_TIME: 2000
+    ports:
+      - 2181:2181
+
+  kafka:
+    image: confluentinc/cp-kafka:latest
+    container_name: kafka
+    depends_on:
+      - zookeeper
+    ports:
+      - 29092:29092
+      - 9092:9092
+    environment:
+      KAFKA_BROKER_ID: 1
+      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
+      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
+      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
+      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
+      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
diff --git a/docs/development/devtools/smoke/files/mariadb.sql b/docs/development/devtools/smoke/files/mariadb.sql
new file mode 100644 (file)
index 0000000..95c4c76
--- /dev/null
@@ -0,0 +1,3 @@
+create database clampacm;
+CREATE USER 'policy'@'%' IDENTIFIED BY 'P01icY';
+GRANT ALL PRIVILEGES ON clampacm.* TO 'policy'@'%';
diff --git a/docs/development/devtools/smoke/files/pap-application.yaml b/docs/development/devtools/smoke/files/pap-application.yaml
new file mode 100644 (file)
index 0000000..8a03b1d
--- /dev/null
@@ -0,0 +1,91 @@
+spring:
+  security:
+    user:
+      name: policyadmin
+      password: zb!XztG34
+  datasource:
+    url: jdbc:mariadb://localhost:3306/policyadmin
+    driverClassName: org.mariadb.jdbc.Driver
+    username: policy_user
+    password: policy_user
+  jpa:
+    hibernate:
+      ddl-auto: none
+      naming:
+        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
+        implicit-strategy: org.onap.policy.common.spring.utils.CustomImplicitNamingStrategy
+  mvc:
+    converters:
+      preferred-json-mapper: gson
+
+server:
+  port: 6970
+  servlet:
+    context-path: /policy/pap/v1
+pap:
+  name: PapGroup
+  topic:
+    pdp-pap.name: POLICY-PDP-PAP
+    notification.name: POLICY-NOTIFICATION
+    heartbeat.name: POLICY-HEARTBEAT
+  pdpParameters:
+    heartBeatMs: 120000
+    updateParameters:
+      maxRetryCount: 1
+      maxWaitMs: 30000
+    stateChangeParameters:
+      maxRetryCount: 1
+      maxWaitMs: 30000
+  topicParameterGroup:
+    topicSources:
+      - topic: ${pap.topic.pdp-pap.name}
+        servers:
+          - kafka
+        topicCommInfrastructure: NOOP
+        fetchTimeout: 15000
+      - topic: ${pap.topic.heartbeat.name}
+        effectiveTopic: ${pap.topic.pdp-pap.name}
+        consumerGroup: policy-pap
+        servers:
+          - kafka
+        topicCommInfrastructure: NOOP
+        fetchTimeout: 15000
+    topicSinks:
+      - topic: ${pap.topic.pdp-pap.name}
+        servers:
+          - kafka
+        topicCommInfrastructure: NOOP
+      - topic: ${pap.topic.notification.name}
+        servers:
+          - kafka
+        topicCommInfrastructure: NOOP
+  healthCheckRestClientParameters:
+    - clientName: api
+      hostname: localhost
+      port: 6968
+      userName: policyadmin
+      password: zb!XztG34
+      useHttps: false
+      basePath: policy/api/v1/healthcheck
+    - clientName: distribution
+      hostname: policy-distribution
+      port: 6969
+      userName: healthcheck
+      password: zb!XztG34
+      useHttps: true
+      basePath: healthcheck
+    - clientName: kafka
+      hostname: kafka
+      port: 3905
+      useHttps: true
+      basePath: topics
+
+management:
+  endpoints:
+    web:
+      base-path: /
+      exposure:
+        include: health, metrics, prometheus
+      path-mapping:
+        -metrics: plain-metrics
+        -prometheus: metrics
diff --git a/docs/development/devtools/smoke/files/participant-http-application.yaml b/docs/development/devtools/smoke/files/participant-http-application.yaml
new file mode 100644 (file)
index 0000000..142c24e
--- /dev/null
@@ -0,0 +1,23 @@
+
+participant:
+  intermediaryParameters:
+    reportingTimeIntervalMs: 120000
+    description: Participant Description
+    participantId: 101c62b3-8918-41b9-a747-d21eb79c6c01
+    clampAutomationCompositionTopics:
+      topicSources:
+        - topic: policy-acruntime-participant
+          servers:
+            - ${topicServer:localhost:29092}
+          topicCommInfrastructure: kafka
+          fetchTimeout: 15000
+      topicSinks:
+        - topic: policy-acruntime-participant
+          servers:
+            - ${topicServer:localhost:29092}
+          topicCommInfrastructure: kafka
+    participantSupportedElementTypes:
+      -
+        typeName: org.onap.policy.clamp.acm.HttpAutomationCompositionElement
+        typeVersion: 1.0.0
+
diff --git a/docs/development/devtools/smoke/files/participant-kubernetes-application.yaml b/docs/development/devtools/smoke/files/participant-kubernetes-application.yaml
new file mode 100644 (file)
index 0000000..9b25c61
--- /dev/null
@@ -0,0 +1,26 @@
+
+participant:
+  localChartDirectory: /home/policy/local-charts
+  infoFileName: CHART_INFO.json
+  intermediaryParameters:
+    reportingTimeIntervalMs: 120000
+    description: Participant Description
+    participantId: 101c62b3-8918-41b9-a747-d21eb79c6c02
+    clampAutomationCompositionTopics:
+      topicSources:
+        -
+          topic: policy-acruntime-participant
+          servers:
+            - ${topicServer:localhost:29092}
+          topicCommInfrastructure: kafka
+          fetchTimeout: 15000
+      topicSinks:
+        -
+          topic: policy-acruntime-participant
+          servers:
+            - ${topicServer:localhost:29092}
+          topicCommInfrastructure: kafka
+    participantSupportedElementTypes:
+      -
+        typeName: org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement
+        typeVersion: 1.0.0
diff --git a/docs/development/devtools/smoke/files/participant-policy-application.yaml b/docs/development/devtools/smoke/files/participant-policy-application.yaml
new file mode 100644 (file)
index 0000000..5b87d1b
--- /dev/null
@@ -0,0 +1,41 @@
+participant:
+  pdpGroup: defaultGroup
+  pdpType: apex
+  policyApiParameters:
+    clientName: api
+    hostname: localhost
+    port: 6968
+    userName: policyadmin
+    password: zb!XztG34
+    useHttps: false
+    allowSelfSignedCerts: false
+  policyPapParameters:
+    clientName: pap
+    hostname: localhost
+    port: 6970
+    userName: policyadmin
+    password: zb!XztG34
+    useHttps: false
+    allowSelfSignedCerts: false
+  intermediaryParameters:
+    reportingTimeIntervalMs: 120000
+    description: Participant Description
+    participantId: 101c62b3-8918-41b9-a747-d21eb79c6c03
+    clampAutomationCompositionTopics:
+      topicSources:
+        -
+          topic: policy-acruntime-participant
+          servers:
+            - ${topicServer:localhost:29092}
+          topicCommInfrastructure: kafka
+          fetchTimeout: 15000
+      topicSinks:
+        -
+          topic: policy-acruntime-participant
+          servers:
+            - ${topicServer:localhost:29092}
+          topicCommInfrastructure: kafka
+    participantSupportedElementTypes:
+      -
+        typeName: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement
+        typeVersion: 1.0.0
diff --git a/docs/development/devtools/smoke/files/participant-sim-application.yaml b/docs/development/devtools/smoke/files/participant-sim-application.yaml
new file mode 100644 (file)
index 0000000..2d23c12
--- /dev/null
@@ -0,0 +1,22 @@
+
+participant:
+  intermediaryParameters:
+    reportingTimeIntervalMs: 120000
+    description: Participant Description
+    participantId: 101c62b3-8918-41b9-a747-d21eb79c6c90
+    clampAutomationCompositionTopics:
+      topicSources:
+        - topic: policy-acruntime-participant
+          servers:
+            - ${topicServer:localhost:29092}
+          topicCommInfrastructure: kafka
+          fetchTimeout: 15000
+      topicSinks:
+        - topic: policy-acruntime-participant
+          servers:
+            - ${topicServer:localhost:29092}
+          topicCommInfrastructure: kafka
+    participantSupportedElementTypes:
+      -
+        typeName: org.onap.policy.clamp.acm.SimAutomationCompositionElement
+        typeVersion: 1.0.0
diff --git a/docs/development/devtools/smoke/files/runtime-application.yaml b/docs/development/devtools/smoke/files/runtime-application.yaml
new file mode 100644 (file)
index 0000000..f798d5b
--- /dev/null
@@ -0,0 +1,22 @@
+
+runtime:
+  participantParameters:
+    heartBeatMs: 20000
+    maxStatusWaitMs: 200000
+  topicParameterGroup:
+    topicSources:
+      -
+        topic: policy-acruntime-participant
+        servers:
+          - ${topicServer:localhost:29092}
+        topicCommInfrastructure: kafka
+        fetchTimeout: 15000
+    topicSinks:
+      -
+        topic: policy-acruntime-participant
+        servers:
+          - ${topicServer:localhost:29092}
+        topicCommInfrastructure: kafka
+  acmParameters:
+    toscaElementName: org.onap.policy.clamp.acm.AutomationCompositionElement
+    toscaCompositionName: org.onap.policy.clamp.acm.AutomationComposition
index 28eef7d..2cf009c 100644 (file)
@@ -10,7 +10,6 @@
                 "name": "org.onap.policy.clamp.Local_K8SMicroserviceAutomationCompositionElement",
                 "version": "1.2.3"
             },
-            "participantId": "101c62b3-8918-41b9-a747-d21eb79c6c02",
             "description": "K8s Automation composition Element for the nginx-ingress microservice",
             "properties": {
                 "chart": {
@@ -29,7 +28,6 @@
                 "name": "org.onap.policy.clamp.Http_AutomationCompositionElement",
                 "version": "1.2.3"
             },
-            "participantId": "101c62b3-8918-41b9-a747-d21eb79c6c01",
             "description": "Http Automation composition Element",
             "properties": {
                 "baseUrl": "http://httpbin.org",
@@ -59,4 +57,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
index aa8ca23..6346d76 100644 (file)
@@ -10,7 +10,6 @@
                 "name": "onap.policy.clamp.ac.element.Policy_AutomationCompositionElement",
                 "version": "1.2.3"
             },
-            "participantId": "101c62b3-8918-41b9-a747-d21eb79c6c03",
             "description": "Starter Automation Composition Element for the Demo",
             "properties": {
                 "policy_type_id": {
index 58e3449..ba677e1 100644 (file)
@@ -11,21 +11,23 @@ CLAMP Policy Participant Smoke Tests
 The Smoke testing of the policy participant is executed in a local CLAMP/Policy environment. The CLAMP-ACM interfaces interact with the Policy Framework to perform actions based on the state of the policy participant. The goal of the Smoke tests is the ensure that CLAMP Policy Participant and Policy Framework work together as expected.
 All applications will be running by console, so they need to run with different ports. Configuration files should be changed accordingly.
 
-+------------------------------+------+
-| Application                  | port |
-+==============================+======+
-| MariDB                       | 3306 |
-+------------------------------+------+
-| DMaaP simulator              | 3904 |
-+------------------------------+------+
-| policy-api                   | 6968 |
-+------------------------------+------+
-| policy-pap                   | 6970 |
-+------------------------------+------+
-| policy-clamp-runtime-acm     | 6969 |
-+------------------------------+------+
-| onap/policy-clamp-ac-pf-ppnt | 8085 |
-+------------------------------+------+
++------------------------------+-------+
+| Application                  |  port |
++==============================+=======+
+| MariDB                       |  3306 |
++------------------------------+-------+
+| Zookeeper                    |  2181 |
++------------------------------+-------+
+| Kafka                        | 29092 |
++------------------------------+-------+
+| policy-api                   |  6968 |
++------------------------------+-------+
+| policy-pap                   |  6970 |
++------------------------------+-------+
+| policy-clamp-runtime-acm     |  6969 |
++------------------------------+-------+
+| onap/policy-clamp-ac-pf-ppnt |  8085 |
++------------------------------+-------+
 
 
 2. Setup Guide
@@ -36,301 +38,366 @@ This section will show the developer how to set up their environment to start te
 2.1 Prerequisites
 =================
 
-- Java 11
-- Maven 3
+- Java 17
+- Maven 3.9
 - Git
 - Refer to this guide for basic environment setup `Setting up dev environment <https://wiki.onap.org/display/DW/Setting+Up+Your+Development+Environment>`_
 
-2.2 Assumptions
-===============
+2.2 Cloning CLAMP automation composition and all dependency
+===========================================================
 
-- You are accessing the policy repositories through gerrit
-- You are using "git review".
+Run a script such as the script below to clone the required modules from the `ONAP git repository <https://gerrit.onap.org/r/admin/repos/q/filter:policy>`_. This script clones CLAMP automation composition and all dependency.
 
-The following repositories are required for development in this project. These repositories should be present on your machine and you should run "mvn clean install" on all of them so that the packages are present in your .m2 repository.
+.. code-block:: bash
+   :caption: Typical ONAP Policy Framework Clone Script
+   :linenos:
 
-- policy/parent
-- policy/common
-- policy/models
-- policy/clamp
-- policy/api
-- policy/pap
+    #!/usr/bin/env bash
 
-In this setup guide, we will be setting up all the components technically required for a working convenient dev environment.
+    ## script name for output
+    MOD_SCRIPT_NAME='basename $0'
 
-2.3 Setting up the components
-=============================
+    ## the ONAP clone directory, defaults to "onap"
+    clone_dir="onap"
 
-2.3.1 MariaDB Setup
-^^^^^^^^^^^^^^^^^^^
+    ## the ONAP repos to clone
+    onap_repos="\
+    policy/api \
+    policy/clamp \
+    policy/pap "
 
-We will be using Docker to run our mariadb instance. It will have a total of two databases running in it.
+    ##
+    ## Help screen and exit condition (i.e. too few arguments)
+    ##
+    Help()
+    {
+        echo ""
+        echo "$MOD_SCRIPT_NAME - clones all required ONAP git repositories"
+        echo ""
+        echo "       Usage:  $MOD_SCRIPT_NAME [-options]"
+        echo ""
+        echo "       Options"
+        echo "         -d          - the ONAP clone directory, defaults to '.'"
+        echo "         -h          - this help screen"
+        echo ""
+        exit 255;
+    }
 
-- clampacm: the policy-clamp-runtime-acm db
-- policyadmin: the policy-api db
+    ##
+    ## read command line
+    ##
+    while [ $# -gt 0 ]
+    do
+        case $1 in
+            #-d ONAP clone directory
+            -d)
+                shift
+                if [ -z "$1" ]; then
+                    echo "$MOD_SCRIPT_NAME: no clone directory"
+                    exit 1
+                fi
+                clone_dir=$1
+                shift
+            ;;
 
-A sql such as the one below can be used to build the SQL initialization. Create the *mariadb.sql* file in a directory *PATH_DIRECTORY*.
+            #-h prints help and exists
+            -h)
+                Help;exit 0;;
 
-    .. code-block:: SQL
+            *)    echo "$MOD_SCRIPT_NAME: undefined CLI option - $1"; exit 255;;
+        esac
+    done
+
+    if [ -f "$clone_dir" ]; then
+        echo "$MOD_SCRIPT_NAME: requested clone directory '$clone_dir' exists as file"
+        exit 2
+    fi
+    if [ -d "$clone_dir" ]; then
+        echo "$MOD_SCRIPT_NAME: requested clone directory '$clone_dir' exists as directory"
+        exit 2
+    fi
+
+    mkdir $clone_dir
+    if [ $? != 0 ]
+    then
+        echo cannot clone ONAP repositories, could not create directory '"'$clone_dir'"'
+        exit 3
+    fi
+
+    for repo in $onap_repos
+    do
+        repoDir=`dirname "$repo"`
+        repoName=`basename "$repo"`
+
+        if [ ! -z $dirName ]
+        then
+            mkdir "$clone_dir/$repoDir"
+            if [ $? != 0 ]
+            then
+                echo cannot clone ONAP repositories, could not create directory '"'$clone_dir/repoDir'"'
+                exit 4
+            fi
+        fi
+
+        git clone https://gerrit.onap.org/r/${repo} $clone_dir/$repo
+    done
+
+    echo ONAP has been cloned into '"'$clone_dir'"'
+
+
+Execution of the script above results in the following directory hierarchy in your *~/git* directory:
+
+    *  ~/git/onap
+    *  ~/git/onap/policy
+    *  ~/git/onap/policy/api
+    *  ~/git/onap/policy/clamp
+    *  ~/git/onap/policy/pap
+
+
+2.3 Building CLAMP automation composition and all dependency
+============================================================
+
+**Step 1:** Setting topicParameterGroup for kafka localhost in clamp and policy-participant.
+It needs to set 'kafka' as topicCommInfrastructure and 'localhost:29092' as server.
+In the clamp repo, you should find the file 'runtime-acm/src/main/resources/application.yaml'. This file (in the 'runtime' parameters section) may need to be altered as below:
+
+.. literalinclude:: files/runtime-application.yaml
+   :language: yaml
+
+Setting topicParameterGroup for kafka localhost and api/pap http client (in the 'participant' parameters section) may need to be apply into the file 'participant/participant-impl/participant-impl-policy/src/main/resources/config/application.yaml'.
+
+.. literalinclude:: files/participant-policy-application.yaml
+   :language: yaml
+
+
+**Step 2:** Setting datasource.url, hibernate.ddl-auto and server.port in policy-api.
+In the api repo, you should find the file 'main/src/main/resources/application.yaml'. This file may need to be altered as below:
+
+.. literalinclude:: files/api-application.yaml
+   :language: yaml
 
-       create database clampacm;
-       CREATE USER 'policy'@'%' IDENTIFIED BY 'P01icY';
-       GRANT ALL PRIVILEGES ON clampacm.* TO 'policy'@'%';
-       CREATE DATABASE `policyadmin`;
-       CREATE USER 'policy_user'@'%' IDENTIFIED BY 'policy_user';
-       GRANT ALL PRIVILEGES ON policyadmin.* to 'policy_user'@'%';
-       FLUSH PRIVILEGES;
 
+**Step 3:** Setting datasource.url, server.port, and api http client in policy-pap.
+In the pap repo, you should find the file 'main/src/main/resources/application.yaml'. This file may need to be altered as below:
 
-Execution of the command above results in the creation and start of the *mariadb-smoke-test* container.
+.. literalinclude:: files/pap-application.yaml
+   :language: yaml
+
+
+**Step 4:** Optionally, for a completely clean build, remove the ONAP built modules from your local repository.
 
     .. code-block:: bash
 
-       docker run --name mariadb-smoke-test  \
-        -p 3306:3306 \
-        -e MYSQL_ROOT_PASSWORD=my-secret-pw  \
-        --mount type=bind,source=PATH_DIRECTORY/mariadb.sql,target=/docker-entrypoint-initdb.d/data.sql \
-        -d mariadb:10.10.2 \
-        --lower-case-table-names=1
+        rm -fr ~/.m2/repository/org/onap
 
-This will setup the two databases needed. The database will be exposed locally on port 3306.
 
-2.3.2 DMAAP Simulator
-^^^^^^^^^^^^^^^^^^^^^
+**Step 5:**  A pom such as the one below can be used to build the ONAP Policy Framework modules. Create the *pom.xml* file in the directory *~/git/onap/policy*.
 
-For convenience, a dmaap simulator has been provided in the policy/models repository. To start the simulator, you can do the following:
+.. code-block:: xml
+  :caption: Typical pom.xml to build the ONAP Policy Framework
+  :linenos:
 
-#. Navigate to models-sim/policy-models-simulators in the policy/models repository.
-#. Add a configuration file to src/test/resources with the following contents:
+    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+        <modelVersion>4.0.0</modelVersion>
+        <groupId>org.onap</groupId>
+        <artifactId>onap-policy</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+        <packaging>pom</packaging>
+        <name>${project.artifactId}</name>
+        <inceptionYear>2024</inceptionYear>
+        <organization>
+            <name>ONAP</name>
+        </organization>
 
-.. code-block:: json
+        <modules>
+            <module>api</module>
+            <module>clamp</module>
+            <module>pap</module>
+        </modules>
+    </project>
 
-    {
-       "dmaapProvider":{
-          "name":"DMaaP simulator",
-          "topicSweepSec":900
-       },
-       "restServers":[
-          {
-             "name":"DMaaP simulator",
-             "providerClass":"org.onap.policy.models.sim.dmaap.rest.DmaapSimRestControllerV1",
-             "host":"localhost",
-             "port":3904,
-             "https":false
-          }
-       ]
-    }
 
-3. You can then start dmaap with:
+**Step 6:** You can now build the Policy framework.
 
-.. code-block:: bash
+Build java artifacts only:
+
+    .. code-block:: bash
+
+       cd ~/git/onap/policy
+       mvn clean install -DskipTests
+
+Build with docker images:
+
+    .. code-block:: bash
+
+       cd ~/git/onap/policy/clamp/packages/
+       mvn clean install -P docker
+
+       cd ~/git/onap/policy/api/packages/
+       mvn clean install -P docker
+
+       cd ~/git/onap/policy/pap/packages/
+       mvn clean install -P docker
+
+2.4 Setting up the components
+=============================
 
-    mvn exec:java  -Dexec.mainClass=org.onap.policy.models.simulators.Main -Dexec.args="src/test/resources/YOUR_CONF_FILE.json"
+2.4.1 MariaDB and Kafka Setup
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-At this stage the dmaap simulator should be running on your local machine on port 3904.
+We will be using Docker to run our mariadb instance`and Zookeeper/Kafka. It will have a total of two databases running in mariadb.
 
-2.3.3 Policy API
+- clampacm: the policy-clamp-runtime-acm db
+- policyadmin: the policy-api db
+
+**Step 1:** Create the *mariadb.sql* file in a directory *~/git*.
+
+    .. code-block:: SQL
+
+       create database clampacm;
+       CREATE USER 'policy'@'%' IDENTIFIED BY 'P01icY';
+       GRANT ALL PRIVILEGES ON clampacm.* TO 'policy'@'%';
+       CREATE DATABASE `policyadmin`;
+       CREATE USER 'policy_user'@'%' IDENTIFIED BY 'policy_user';
+       GRANT ALL PRIVILEGES ON policyadmin.* to 'policy_user'@'%';
+       CREATE DATABASE `migration`;
+       GRANT ALL PRIVILEGES ON migration.* to 'policy_user'@'%';
+       FLUSH PRIVILEGES;
+
+
+**Step 2:** Create the *init.sh* file in a directory *~/git* with execution permission.
+
+    .. code-block:: sh
+
+       #!/bin/sh
+
+       export POLICY_HOME=/opt/app/policy
+       export SQL_USER=${MYSQL_USER}
+       export SQL_PASSWORD=${MYSQL_PASSWORD}
+       export SCRIPT_DIRECTORY=sql
+
+       /opt/app/policy/bin/prepare_upgrade.sh ${SQL_DB}
+       /opt/app/policy/bin/db-migrator -s ${SQL_DB} -o report
+       /opt/app/policy/bin/db-migrator -s ${SQL_DB} -o upgrade
+       rc=$?
+       /opt/app/policy/bin/db-migrator -s ${SQL_DB} -o report
+       nc -l -p 6824
+       exit $rc
+
+
+**Step 3:** Create the *wait_for_port.sh* file in a directory *~/git* with execution permission.
+
+    .. code-block:: sh
+
+       #!/bin/sh
+
+       usage() {
+         echo args: [-t timeout] [-c command] hostname1 port1 hostname2 port2 ... >&2
+         exit 1
+       }
+       tmout=300
+       cmd=
+       while getopts c:t: opt
+       do
+           case "$opt" in
+               c)
+                   cmd="$OPTARG"
+                   ;;
+               t)
+                   tmout="$OPTARG"
+                   ;;
+               *)
+                   usage
+                   ;;
+           esac
+       done
+       nargs=$((OPTIND-1))
+       shift "$nargs"
+       even_args=$(($#%2))
+       if [ $# -lt 2 ] || [ "$even_args" -ne 0 ]
+       then
+           usage
+       fi
+       while [ $# -ge 2 ]
+       do
+           export host="$1"
+           export port="$2"
+           shift
+           shift
+           echo "Waiting for $host port $port..."
+
+           while [ "$tmout" -gt 0 ]
+           do
+               if command -v docker > /dev/null 2>&1
+               then
+                   docker ps --format "table {{ .Names }}\t{{ .Status }}"
+               fi
+               nc -vz "$host" "$port"
+               rc=$?
+               if [ $rc -eq 0 ]
+               then
+                   break
+               else
+                   tmout=$((tmout-1))
+                   sleep 1
+               fi
+           done
+           if [ $rc -ne 0 ]
+           then
+               echo "$host port $port cannot be reached"
+               exit $rc
+           fi
+       done
+       $cmd
+       exit 0
+
+
+**Step 4:** Create the '*docker-compose.yaml*' using following code:
+
+.. literalinclude:: files/docker-compose-policy.yaml
+   :language: yaml
+
+
+**Step 5:** Run the docker composition:
+
+   .. code-block:: bash
+
+      cd ~/git/
+      docker compose up
+
+
+2.4.2 Policy API
 ^^^^^^^^^^^^^^^^
 
-Navigate to the "/main" directory. You can then run the following command to start the policy api:
+In the policy-api repo, navigate to the "/main" directory. You can then run the following command to start the policy api:
 
 .. code-block:: bash
 
-    java -jar target/api-main-2.8.2-SNAPSHOT.jar --spring.datasource.url=jdbc:mariadb://localhost:3306/policyadmin --spring.jpa.hibernate.ddl-auto=update --server.port=6968
+    mvn spring-boot:run
 
 
-2.3.4 Policy PAP
+2.4.3 Policy PAP
 ^^^^^^^^^^^^^^^^
 
-In the policy-pap repo, you should find the file 'main\src\main\resources\application.yaml'. This file may need to be altered slightly as below:
-
-.. code-block:: yaml
-
-    spring:
-      security:
-        user:
-          name: policyadmin
-          password: zb!XztG34
-      http:
-        converters:
-          preferred-json-mapper: gson
-      datasource:
-        url: jdbc:mariadb://localhost:3306/policyadmin
-        driverClassName: org.mariadb.jdbc.Driver
-        username: policy_user
-        password: policy_user
-      jpa:
-        properties:
-          hibernate:
-            dialect: org.hibernate.dialect.MariaDB103Dialect
-        hibernate:
-          ddl-auto: update
-          naming:
-            physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
-            implicit-strategy: org.onap.policy.common.spring.utils.CustomImplicitNamingStrategy
-
-    server:
-      port: 6970
-      servlet:
-        context-path: /policy/pap/v1
-    pap:
-      name: PapGroup
-      aaf: false
-      topic:
-        pdp-pap.name: POLICY-PDP-PAP
-        notification.name: POLICY-NOTIFICATION
-        heartbeat.name: POLICY-HEARTBEAT
-      pdpParameters:
-        heartBeatMs: 120000
-        updateParameters:
-          maxRetryCount: 1
-          maxWaitMs: 30000
-        stateChangeParameters:
-          maxRetryCount: 1
-          maxWaitMs: 30000
-      savePdpStatisticsInDb: true
-      topicParameterGroup:
-        topicSources:
-        - topic: ${pap.topic.pdp-pap.name}
-          servers:
-          - localhost
-          topicCommInfrastructure: dmaap
-          fetchTimeout: 15000
-        - topic: ${pap.topic.heartbeat.name}
-          effectiveTopic: ${pap.topic.pdp-pap.name}
-          consumerGroup: policy-pap
-          servers:
-          - localhost
-          topicCommInfrastructure: dmaap
-          fetchTimeout: 15000
-        topicSinks:
-        - topic: ${pap.topic.pdp-pap.name}
-          servers:
-          - localhost
-          topicCommInfrastructure: dmaap
-        - topic: ${pap.topic.notification.name}
-          servers:
-          - localhost
-          topicCommInfrastructure: dmaap
-      healthCheckRestClientParameters:
-      - clientName: api
-        hostname: localhost
-        port: 6968
-        userName: policyadmin
-        password: zb!XztG34
-        useHttps: false
-        basePath: policy/api/v1/healthcheck
-      - clientName: distribution
-        hostname: policy-distribution
-        port: 6969
-        userName: healthcheck
-        password: zb!XztG34
-        useHttps: false
-        basePath: healthcheck
-      - clientName: dmaap
-        hostname: localhost
-        port: 3904
-        useHttps: false
-        basePath: topics
-
-    management:
-      endpoints:
-        web:
-          base-path: /
-          exposure:
-            include: health, metrics, prometheus
-          path-mapping.metrics: plain-metrics
-          path-mapping.prometheus: metrics
-
-Next, navigate to the "/main" directory. You can then run the following command to start the policy pap
+In the policy-pap repo, navigate to the "/main" directory. You can then run the following command to start the policy pap:
 
 .. code-block:: bash
 
     mvn spring-boot:run
 
-2.3.5 ACM Runtime
+2.4.4 ACM Runtime
 ^^^^^^^^^^^^^^^^^
 
-To start the clampacm runtime we need to go the "runtime-acm" directory in the clamp repo. There is a config file that is used, by default, for the clampacm runtime. That config file is here: "src/main/resources/application.yaml". For development in your local environment, it shouldn't need any adjustment and we can just run the clampacm runtime with:
+To start the clampacm runtime we need to go the "runtime-acm" directory in the clamp repo. You can then run the following command to start the clampacm runtime:
 
 .. code-block:: bash
 
     mvn spring-boot:run
 
-2.3.6 ACM Policy Participant
+2.4.5 ACM Policy Participant
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-To start the policy participant we need to go to the "participant/participant-impl/participant-impl-policy" directory in the clamp repo. There is a config file under "src/main/resources/config/application.yaml". For development in your local environment, we will need to adjust this file slightly:
-
-.. code-block:: yaml
-
-    spring:
-      security:
-        user:
-          name: participantUser
-          password: zb!XztG34
-      autoconfigure:
-        exclude:
-          - org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
-          - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
-          - org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration
-          - org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration
-
-    participant:
-      pdpGroup: defaultGroup
-      pdpType: apex
-      policyApiParameters:
-        clientName: api
-        hostname: localhost
-        port: 6968
-        userName: policyadmin
-        password: zb!XztG34
-        useHttps: false
-        allowSelfSignedCerts: true
-      policyPapParameters:
-        clientName: pap
-        hostname: localhost
-        port: 6970
-        userName: policyadmin
-        password: zb!XztG34
-        useHttps: false
-        allowSelfSignedCerts: true
-      intermediaryParameters:
-        reportingTimeIntervalMs: 120000
-        description: Participant Description
-        participantId: 101c62b3-8918-41b9-a747-d21eb79c6c03
-        clampAutomationCompositionTopics:
-          topicSources:
-            -
-              topic: POLICY-ACRUNTIME-PARTICIPANT
-              servers:
-                - ${topicServer:localhost}
-              topicCommInfrastructure: dmaap
-              fetchTimeout: 15000
-          topicSinks:
-            -
-              topic: POLICY-ACRUNTIME-PARTICIPANT
-              servers:
-                - ${topicServer:localhost}
-              topicCommInfrastructure: dmaap
-        participantSupportedElementTypes:
-          -
-            typeName: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement
-            typeVersion: 1.0.0
-
-    management:
-      endpoints:
-        web:
-          base-path: /
-          exposure:
-            include: health, metrics, prometheus
-    server:
-      port: 8085
-      servlet:
-        context-path: /onap/policy/clamp/acm/policyparticipant
-
-
-Navigate to the "participant/participant-impl/participant-impl-policy" directory. We can then run the policy-participant with the following command:
+To start the policy participant we need to go to the "participant/participant-impl/participant-impl-policy" directory in the clamp repo. You can then run the following command to start the policy-participant:
 
 .. code-block:: bash
 
index 2a0be4b..61f3551 100644 (file)
 XACML PDP Smoke Test
 ~~~~~~~~~~~~~~~~~~~~
 
-The policy-xacml-pdp smoke testing can be executed against a kubernetes based ONAP installation,
+The policy-xacml-pdp smoke testing can be executed against a kubernetes based policy framework installation,
 and/or a docker-compose set up similar to the one executed by CSIT tests.
 
 General Setup
 *************
 
-ONAP OOM kubernetes
--------------------
+PF kubernetes Install
+---------------------
 
 For installation instructions, please refer to the following documentation:
 
-`OOM Documentation <https://docs.onap.org/projects/onap-oom/en/latest/>`_
+`Policy Framework K8S Install <https://docs.onap.org/projects/onap-policy-parent/en/latest/development/devtools/testing/csit.html>`_
 
-At a minimum policy needs the following components installed:
-
-- onap base charts
-- AAF for certificate generation
-- DMaaP message-router for communication among policy components.
+The script referred to in the above link should handle the install of the of microk8s, docker and other required components for the install of the policy framework and clamp components. The scripts are used by policy as a means to run the CSIT tests in Kubernetes.
 
 docker-compose based
 --------------------
 
-A smaller testing environment can be put together by replicating the CSIT test environment:
+A smaller testing environment can be put together by replicating the docker-based CSIT test environment. Details are on the same page as K8s setup:
 
-`Policy CSIT Test infrastructure <https://git.onap.org/policy/docker/tree/csit>`_
+`Policy CSIT Test Install Docker <https://docs.onap.org/projects/onap-policy-parent/en/latest/development/devtools/testing/csit.html>`_
 
 Testing procedures
 ******************
 
 The smoke tests should be focused on verifying the proper workings of the xacml
-PDP and dependent components.   The following scenarios should be considered:
+PDP and dependent components. The following scenarios should be considered:
 
 - PDP-X registration with PAP.
 - PDP-X restarts and re-registration with PAP.
index ae3308d..38b6c00 100644 (file)
Binary files a/docs/development/devtools/testing/s3p/clamp-s3p-results/acm_performance_jmeter.png and b/docs/development/devtools/testing/s3p/clamp-s3p-results/acm_performance_jmeter.png differ
index 3721435..bd9d0e8 100644 (file)
Binary files a/docs/development/devtools/testing/s3p/clamp-s3p-results/acm_stability_jmeter.png and b/docs/development/devtools/testing/s3p/clamp-s3p-results/acm_stability_jmeter.png differ
index 6401eb1..94402c8 100644 (file)
Binary files a/docs/development/devtools/testing/s3p/clamp-s3p-results/acm_stability_table.png and b/docs/development/devtools/testing/s3p/clamp-s3p-results/acm_stability_table.png differ
index dc0b599..2cf3e23 100644 (file)
@@ -37,7 +37,7 @@ The common setup for performance and stability tests is now automated - being ca
 
 Clone the policy-clamp repo to access the test scripts
 
-.. code-block:: bash
+.. code-block:: sh
 
     git clone https://gerrit.onap.org/r/policy/clamp
 
@@ -69,9 +69,9 @@ Run Test
 
 The code in the setup section also serves to run the tests. Just one execution needed to do it all.
 
-.. code-block:: bash
+.. code-block:: sh
 
-    bash run-s3p-test.sh run stability
+    ./run-s3p-test.sh run stability
 
 Once the test execution is completed, the results are present in the **automate-performance/s3pTestResults.jtl** file.
 
@@ -89,24 +89,28 @@ Stability test plan was triggered for 72 hours.
 =======================  =================  ==================  ==================================
 **Total # of requests**  **Success %**      **Error %**         **Average time taken per request**
 =======================  =================  ==================  ==================================
-260590                    100.00 %           0.00 %              997 ms
+261852                    100.00 %           0.00 %              387.126 ms
 =======================  =================  ==================  ==================================
 
 **ACM component Setup**
 
-==============================================  ============================================================    ===========================================
-**NAME**                                        **IMAGE**                                                       **PORT**
-==============================================  ============================================================    ===========================================
- policy-clamp-runtime-acm-5c6d8fbfb-jz8rb       nexus3.onap.org:10001/onap/policy-clamp-runtime-acm:latest      30007/tcp
- policy-clamp-ac-pf-ppnt-55c4cb99f4-spvng       nexus3.onap.org:10001/onap/policy-clamp-ac-pf-ppnt:latest       30008/tcp
- policy-api-58cb45fc9b-ff5md                    nexus3.onap.org:10001/onap/policy-api:latest                    30002/tcp
- policy-clamp-ac-http-ppnt-7b99cbfbf8-d4w9v     nexus3.onap.org:10001/onap/policy-clamp-ac-http-ppnt:latest     30009/tcp
- policy-clamp-ac-k8s-ppnt-6d854cc8b6-twdkh      nexus3.onap.org:10001/onap/policy-clamp-ac-k8s-ppnt:latest      30010/tcp
- policy-models-simulator-bcd494d87-bfg6g        nexus3.onap.org:10001/onap/policy-models-simulator:latest       30904/tcp
- mariadb-galera-0                               nexus3.onap.org:10001/mariadb:10.5.8                            3306/tcp
- policy-pap-847d89997d-x9h99                    nexus3.onap.org:10001/onap/policy-pap:latest                    30003/tcp
- policy-apex-pdp-0                              nexus3.onap.org:10001/onap/policy-apex-pdp:latest               6969/tcp
-==============================================  ============================================================    ===========================================
+==============================================  ==================================================================  ====================
+**NAME**                                        **IMAGE**                                                            **PORT**
+==============================================  ==================================================================  ====================
+ zookeeper-deployment-7ff87c7fcc-ptkwv          confluentinc/cp-zookeeper:latest                                     2181/TCP
+ kafka-deployment-5c87d497b-2jv27               confluentinc/cp-kafka:latest                                         9092/TCP
+ policy-models-simulator-6947667bdc-v4czs       nexus3.onap.org:10001/onap/policy-models-simulator:latest            3904:30904/TCP
+ prometheus-f66f97b6-rknvp                      nexus3.onap.org:10001/prom/prometheus:latest                         9090:30909/TCP
+ mariadb-galera-0                               nexus3.onap.org:10001/bitnami/mariadb-galera:10.5.8                  3306/TCP
+ policy-apex-pdp-0                              nexus3.onap.org:10001/onap/policy-apex-pdp:3.1.3-SNAPSHOT            6969:30001/TCP
+ policy-clamp-ac-http-ppnt-7d747b5d98-4phjf     nexus3.onap.org:10001/onap/policy-clamp-ac-http-ppnt7.1.3-SNAPSHOT   8084/TCP
+ policy-clamp-ac-sim-ppnt-97f487577-4p7ks       nexus3.onap.org:10001/onap/policy-clamp-ac-sim-ppnt7.1.3-SNAPSHOT    6969/TCP
+ policy-clamp-ac-k8s-ppnt-6bbd86bbc6-csknn      nexus3.onap.org:10001/onap/policy-clamp-ac-k8s-ppnt7.1.3-SNAPSHOT    8083:30443/TCP
+ policy-clamp-ac-pf-ppnt-5fcbbcdb6c-twkxw       nexus3.onap.org:10001/onap/policy-clamp-ac-pf-ppnt7.1.3-SNAPSHOT     6969:30008/TCP
+ policy-clamp-runtime-acm-66b5d6b64-4gnth       nexus3.onap.org:10001/onap/policy-clamp-runtime-acm7.1.3-SNAPSHOT    6969:30007/TCP
+ policy-pap-f7899d4cd-7m898                     nexus3.onap.org:10001/onap/policy-pap:3.1.3-SNAPSHOT                 6969:30003/TCP
+ policy-api-7f7d995b4-ckb84                     nexus3.onap.org:10001/onap/policy-api:3.1.3-SNAPSHOT                 6969:30002/TCP
+==============================================  ==================================================================  ====================
 
 
 
@@ -124,14 +128,6 @@ Stability test plan was triggered for 72 hours.
 
 .. image:: clamp-s3p-results/acm_stability_table.png
 
-**Memory and CPU usage**
-
-The memory and CPU usage can be monitored by running "docker stats" command.
-
-Memory and CPU usage after test execution:
-
-.. image:: clamp-s3p-results/Stability_after_stats.png
-
 
 Performance Test of acm components
 ++++++++++++++++++++++++++++++++++
@@ -146,30 +142,45 @@ Setup Details
 
 We can setup the environment and execute the tests like this from the **clamp/testsuites** directory
 
-.. code-block:: bash
+.. code-block:: sh
 
-    bash run-s3p-test.sh run performance
+    ./run-s3p-test.sh run performance
 
-This runs for 2 hours. Test results are present in the **testsuites/automate-performance/s3pTestResults.jtl**
+Test results are present in the **testsuites/automate-performance/s3pTestResults.jtl**
 directory. Logs are present for jmeter in **testsuites/automate-performance/jmeter.log** and
 **testsuites/automated-performance/nohup.out**
 
 Test Plan
 ---------
 
-Performance test plan is the same as the stability test plan above except for the few differences listed below.
-
-- Increase the number of threads up to 5 (simulating 5 users' behaviours at the same time).
-- Reduce the test time to 2 hours.
+The Performance test ran the following steps sequentially by 5 threaded users. Any user will create 100 compositions/instances.
+
+- **SetUp** - SetUp Thread Group
+   - **Register Participants** - Registers the presence of participants in the acm database
+- **AutomationComposition Test Flow** - flow by 5 threaded users.
+   - **Creation and Deploy** - Creates 100 Compositions and Instances
+      - **Commission Automation Composition Definitions** - Commissions the ACM Definitions
+      - **Prime AC definition** - Primes the AC Definition to the participants
+      - **Instantiate acm** - Instantiate the acm instance
+      - **DEPLOY the ACM instance** - change the state of the acm to DEPLOYED
+      - **Check instance state** - check the current state of instance and that it is DEPLOYED
+   - **Get participants** - fetch all participants
+   - **Get compositions** - fetch all compositions
+   - **Undeploy and Delete** - Deletes instances and Compositions created before
+      - **UNDEPLOY the ACM instance** - change the state of the ACM to UNDEPLOYED
+      - **Check instance state** - check the current state of instance and that it is UNDEPLOYED
+      - **Delete instance** - delete the instance from all participants and ACM db
+      - **DEPRIME ACM definitions** - DEPRIME ACM definitions from participants
+      - **Delete ACM Definition** - delete the ACM definition on runtime
 
 Run Test
 --------
 
 The code in the setup section also serves to run the tests. Just one execution needed to do it all.
 
-.. code-block:: bash
+.. code-block:: sh
 
-    bash run-s3p-test.sh run performance
+    ./run-s3p-test.sh run performance
 
 Once the test execution is completed, the results are present in the **automate-performance/s3pTestResults.jtl** file.
 
@@ -185,24 +196,28 @@ Test results are shown as below.
 =======================  =================  ==================  ==================================
 **Total # of requests**  **Success %**      **Error %**         **Average time taken per request**
 =======================  =================  ==================  ==================================
-15520                    100 %              0.00 %              464 ms
+8624                     100 %              0.00 %              1296.8 ms
 =======================  =================  ==================  ==================================
 
 **ACM component Setup**
 
-==============================================  ============================================================    ===========================================
-**NAME**                                        **IMAGE**                                                       **PORT**
-==============================================  ============================================================    ===========================================
- policy-clamp-runtime-acm-5c6d8fbfb-jz8rb       nexus3.onap.org:10001/onap/policy-clamp-runtime-acm:latest      30007/tcp
- policy-clamp-ac-pf-ppnt-55c4cb99f4-spvng       nexus3.onap.org:10001/onap/policy-clamp-ac-pf-ppnt:latest       30008/tcp
- policy-api-58cb45fc9b-ff5md                    nexus3.onap.org:10001/onap/policy-api:latest                    30002/tcp
- policy-clamp-ac-http-ppnt-7b99cbfbf8-d4w9v     nexus3.onap.org:10001/onap/policy-clamp-ac-http-ppnt:latest     30009/tcp
- policy-clamp-ac-k8s-ppnt-6d854cc8b6-twdkh      nexus3.onap.org:10001/onap/policy-clamp-ac-k8s-ppnt:latest      30010/tcp
- policy-models-simulator-bcd494d87-bfg6g        nexus3.onap.org:10001/onap/policy-models-simulator:latest       30904/tcp
- mariadb-galera-0                               nexus3.onap.org:10001/mariadb:10.5.8                            3306/tcp
- policy-pap-847d89997d-x9h99                    nexus3.onap.org:10001/onap/policy-pap:latest                    30003/tcp
- policy-apex-pdp-0                              nexus3.onap.org:10001/onap/policy-apex-pdp:latest               6969/tcp
-==============================================  ============================================================    ===========================================
+==============================================  ==================================================================  ====================
+**NAME**                                        **IMAGE**                                                            **PORT**
+==============================================  ==================================================================  ====================
+ zookeeper-deployment-7ff87c7fcc-5svgw          confluentinc/cp-zookeeper:latest                                     2181/TCP
+ kafka-deployment-5c87d497b-hmbhc               confluentinc/cp-kafka:latest                                         9092/TCP
+ policy-models-simulator-6947667bdc-crcwq       nexus3.onap.org:10001/onap/policy-models-simulator:latest            3904:30904/TCP
+ prometheus-f66f97b6-24dvx                      nexus3.onap.org:10001/prom/prometheus:latest                         9090:30909/TCP
+ mariadb-galera-0                               nexus3.onap.org:10001/bitnami/mariadb-galera:10.5.8                  3306/TCP
+ policy-apex-pdp-0                              nexus3.onap.org:10001/onap/policy-apex-pdp:3.1.3-SNAPSHOT            6969:30001/TCP
+ policy-clamp-ac-sim-ppnt-97f487577-pn56t       nexus3.onap.org:10001/onap/policy-clamp-ac-sim-ppnt7.1.3-SNAPSHOT    6969/TCP
+ policy-clamp-ac-http-ppnt-7d747b5d98-qjjlv     nexus3.onap.org:10001/onap/policy-clamp-ac-http-ppnt7.1.3-SNAPSHOT   8084/TCP
+ policy-clamp-ac-k8s-ppnt-6bbd86bbc6-ffbz2      nexus3.onap.org:10001/onap/policy-clamp-ac-k8s-ppnt7.1.3-SNAPSHOT    8083:30443/TCP
+ policy-clamp-ac-pf-ppnt-5fcbbcdb6c-vmsnv       nexus3.onap.org:10001/onap/policy-clamp-ac-pf-ppnt7.1.3-SNAPSHOT     6969:30008/TCP
+ policy-clamp-runtime-acm-66b5d6b64-6vjl5       nexus3.onap.org:10001/onap/policy-clamp-runtime-acm7.1.3-SNAPSHOT    6969:30007/TCP
+ policy-pap-f7899d4cd-8sjk9                     nexus3.onap.org:10001/onap/policy-pap:3.1.3-SNAPSHOT                 6969:30003/TCP
+ policy-api-7f7d995b4-dktdw                     nexus3.onap.org:10001/onap/policy-api:3.1.3-SNAPSHOT                 6969:30002/TCP
+==============================================  ==================================================================  ====================
 
 **JMeter Screenshot**
 
index 98760e0..d535c4a 100644 (file)
Binary files a/docs/development/devtools/testing/s3p/distribution-s3p-results/performance-monitor.png and b/docs/development/devtools/testing/s3p/distribution-s3p-results/performance-monitor.png differ
index 440a177..a2caab4 100644 (file)
Binary files a/docs/development/devtools/testing/s3p/distribution-s3p-results/performance-statistics.png and b/docs/development/devtools/testing/s3p/distribution-s3p-results/performance-statistics.png differ
index a04d98b..9b6c3d2 100644 (file)
Binary files a/docs/development/devtools/testing/s3p/distribution-s3p-results/performance-threads.png and b/docs/development/devtools/testing/s3p/distribution-s3p-results/performance-threads.png differ
index bf20cf3..6a26a09 100644 (file)
Binary files a/docs/development/devtools/testing/s3p/distribution-s3p-results/performance-threshold.png and b/docs/development/devtools/testing/s3p/distribution-s3p-results/performance-threshold.png differ
index 23030a4..cbb675b 100644 (file)
Binary files a/docs/development/devtools/testing/s3p/distribution-s3p-results/stability-monitor.png and b/docs/development/devtools/testing/s3p/distribution-s3p-results/stability-monitor.png differ
index f184a59..ae1853f 100644 (file)
Binary files a/docs/development/devtools/testing/s3p/distribution-s3p-results/stability-statistics.png and b/docs/development/devtools/testing/s3p/distribution-s3p-results/stability-statistics.png differ
index c7279d9..67da4a6 100644 (file)
Binary files a/docs/development/devtools/testing/s3p/distribution-s3p-results/stability-threads.png and b/docs/development/devtools/testing/s3p/distribution-s3p-results/stability-threads.png differ
index 37ad5c4..5aa6cc6 100644 (file)
Binary files a/docs/development/devtools/testing/s3p/distribution-s3p-results/stability-threshold.png and b/docs/development/devtools/testing/s3p/distribution-s3p-results/stability-threshold.png differ
index 57746d3..e061ba4 100644 (file)
Binary files a/docs/development/devtools/testing/s3p/pap-s3p-results/pap_performance_jmeter_results.png and b/docs/development/devtools/testing/s3p/pap-s3p-results/pap_performance_jmeter_results.png differ
index 53f95fb..c1c04f9 100644 (file)
Binary files a/docs/development/devtools/testing/s3p/pap-s3p-results/pap_stability_jmeter_results.png and b/docs/development/devtools/testing/s3p/pap-s3p-results/pap_stability_jmeter_results.png differ
index b95b23f..7c56f74 100644 (file)
Binary files a/docs/development/devtools/testing/s3p/pap-s3p-results/pap_stats_after_72h.png and b/docs/development/devtools/testing/s3p/pap-s3p-results/pap_stats_after_72h.png differ
index 49b05e9..0984521 100644 (file)
Binary files a/docs/development/devtools/testing/s3p/pap-s3p-results/pap_stats_before_72h.png and b/docs/development/devtools/testing/s3p/pap-s3p-results/pap_stats_before_72h.png differ
index e107864..1d86b17 100644 (file)
Binary files a/docs/development/devtools/testing/s3p/pap-s3p-results/pap_stats_during_72h.png and b/docs/development/devtools/testing/s3p/pap-s3p-results/pap_stats_during_72h.png differ
index 04a16e6..c658cbc 100644 (file)
@@ -114,7 +114,7 @@ Stability test plan was triggered for 72 hours. There were no failures during th
 =======================  =================  ==================  ==================================
 **Total # of requests**  **Success %**      **Error %**         **Average time taken per request**
 =======================  =================  ==================  ==================================
-    168997                    100 %             0.00 %              425 ms
+    170212                    100 %             0.00 %              419 ms
 =======================  =================  ==================  ==================================
 
 
@@ -190,7 +190,7 @@ Test results are shown as below.
 =======================  =================  ==================  ==================================
 **Total # of requests**  **Success %**      **Error %**         **Average time taken per request**
 =======================  =================  ==================  ==================================
-199400                    100 %              0.00 %              397 ms
+48093                    100 %              0.00 %              1116 ms
 =======================  =================  ==================  ==================================
 
 **JMeter Screenshot**
old mode 100755 (executable)
new mode 100644 (file)
index b5ef579..6f30f14
Binary files a/docs/development/devtools/testing/s3p/xacml-s3p-results/s3p-perf-xacml.png and b/docs/development/devtools/testing/s3p/xacml-s3p-results/s3p-perf-xacml.png differ
old mode 100755 (executable)
new mode 100644 (file)
index d45aeee..842ec9d
Binary files a/docs/development/devtools/testing/s3p/xacml-s3p-results/s3p-stability-xacml.png and b/docs/development/devtools/testing/s3p/xacml-s3p-results/s3p-stability-xacml.png differ
index 2ca0a53..3b81406 100644 (file)
@@ -88,7 +88,7 @@ Stability test plan was triggered for 24 hours.
 =======================  =================  ========================  =========================
 **Total # of requests**  **Error %**        **Average Latency (ms)**  **Measured requests/sec**
 =======================  =================  ========================  =========================
-  63618103                 0.00 %             5 ms                      736.064 ms
+  54472562                 0.00 %             5 ms                      630.1 ms
 =======================  =================  ========================  =========================
 
 **JMeter Results**
@@ -97,22 +97,26 @@ Stability test plan was triggered for 24 hours.
 
 **Policy component Setup**
 
-==============================================  ====================================================================  ===========================================
+==============================================  ====================================================================  =============================================
 **NAME**                                        **IMAGE**                                                             **PORT**
-==============================================  ====================================================================  ===========================================
+==============================================  ====================================================================  =============================================
+zookeeper-deployment-7ff87c7fcc-fbsfb           confluentinc/cp-zookeeper:latest                                      2181/TCP
+kafka-deployment-5c87d497b-m8s2g                   confluentinc/cp-kafka:latest                                          9092/TCP
+policy-drools-pdp-0                                nexus3.onap.org:10001/onap/policy-pdpd-cl:2.1.3-SNAPSHOT              6969/TCP 9696/TCP
+policy-apex-pdp-0                                  nexus3.onap.org:10001/onap/policy-apex-pdp:3.1.3-SNAPSHOT             6969/TCP
+policy-distribution-f48bff778-48pm2                nexus3.onap.org:10001/onap/policy-distribution:3.1.3-SNAPSHOT         6969/TCP
+policy-models-simulator-6947667bdc-wcd9r        nexus3.onap.org:10001/onap/policy-models-simulator:3.1.3-SNAPSHOT     6666/TCP 6680/TCP 6668/TCP 6669/TCP 6670/TCP
+policy-clamp-ac-http-ppnt-7d747b5d98-wmr5n      nexus3.onap.org:10001/onap/policy-clamp-ac-http-ppnt:7.1.3-SNAPSHOT   8084/TCP
+policy-clamp-ac-k8s-ppnt-6bbd86bbc6-vnvx6       nexus3.onap.org:10001/onap/policy-clamp-ac-k8s-ppnt:7.1.3-SNAPSHOT    8083/TCP
+policy-clamp-ac-pf-ppnt-5fcbbcdb6c-k2cbk        nexus3.onap.org:10001/onap/policy-clamp-ac-pf-ppnt:7.1.3-SNAPSHOT     6969/TCP
+policy-clamp-ac-sim-ppnt-97f487577-m2zjr        nexus3.onap.org:10001/onap/policy-clamp-ac-sim-ppnt:7.1.3-SNAPSHOT    6969/TCP
+policy-clamp-runtime-acm-66b5d6b64-l6dpq        nexus3.onap.org:10001/onap/policy-clamp-runtime-acm:7.1.3-SNAPSHOT    6969/TCP
 mariadb-galera-0                                docker.io/bitnami/mariadb-galera:10.5.8                               3306/TCP
-policy-models-simulator-bcd494d87-cldfr         nexus3.onap.org:10001/onap/policy-models-simulator:3.0.2-SNAPSHOT     30904/TCP
-policy-apex-pdp-0                               nexus3.onap.org:10001/onap/policy-apex-pdp:3.0.2-SNAPSHOT             30001/TCP
-prometheus-f66f97b6-kpg5c                       nexus3.onap.org:10001/prom/prometheus:latest                          30909/TCP
-policy-distribution-86777bdd78-95zjx            nexus3.onap.org:10001/onap/policy-distribution:3.0.2-SNAPSHOT         30006/TCP
-policy-clamp-ac-http-ppnt-7b99cbfbf8-d5zjk      nexus3.onap.org:10001/onap/policy-clamp-ac-http-ppnt:7.0.3-SNAPSHOT
-policy-clamp-ac-pf-ppnt-55c4cb99f4-pp699        nexus3.onap.org:10001/onap/policy-clamp-ac-pf-ppnt:7.0.3-SNAPSHOT     30008/TCP
-policy-clamp-ac-k8s-ppnt-6d854cc8b6-nzlgh       nexus3.onap.org:10001/onap/policy-clamp-ac-k8s-ppnt:7.0.3-SNAPSHOT
-policy-clamp-runtime-acm-5c6d8fbfb-zww5j        nexus3.onap.org:10001/onap/policy-clamp-runtime-acm:7.0.3-SNAPSHOT    30007/TCP
-policy-pap-847d89997d-gljzh                     nexus3.onap.org:10001/onap/policy-pap:3.0.2-SNAPSHOT                  30003/TCP
-policy-xacml-pdp-656d57d578-9h6fx               nexus3.onap.org:10001/onap/policy-xacml-pdp:3.0.2-SNAPSHOT            30004/TCP
-policy-api-58cb45fc9b-9qcx6                     nexus3.onap.org:10001/onap/policy-api:3.0.2-SNAPSHOT                  30002/tcp
-==============================================  ====================================================================  ===========================================
+prometheus-f66f97b6-kkmpq                       nexus3.onap.org:10001/prom/prometheus:latest                          9090/TCP
+policy-api-7f7d995b4-2zhnw                      nexus3.onap.org:10001/onap/policy-api:3.1.3-SNAPSHOT                  6969/TCP
+policy-pap-f7899d4cd-mfrtp                      nexus3.onap.org:10001/onap/policy-pap:3.1.3-SNAPSHOT                  6969/TCP
+policy-xacml-pdp-6c86f85ff6-6qzgf               nexus3.onap.org:10001/onap/policy-xacml-pdp:3.1.2                     6969/TCP
+==============================================  ====================================================================  =============================================
 
 .. Note::
 
@@ -188,7 +192,7 @@ The test was run for 20 minutes with 10 users (i.e., threads), with the followin
 =======================  =================  ========================  =========================
 **Total # of requests**  **Error %**        **Average Latency (ms)**  **Measured requests/sec**
 =======================  =================  ========================  =========================
-  912141                   0.00 %             25.5666 ms                741.917 ms
+  888047                   0.00 %             25 ms                     723.2 ms
 =======================  =================  ========================  =========================
 
 .. image:: xacml-s3p-results/s3p-perf-xacml.png
index 39691ad..d89b476 100644 (file)
@@ -10,13 +10,13 @@ Property-configuration mechanisms
 .. contents::
     :depth: 3
 
-This article explains how to implement handling and validation of common parameter into the Policy Framework Components.
+This article explains how to implement handling and validation of common parameters into the Policy Framework Components.
 
 Not Spring boot framework
 *************************
-The application should have a ParameterHandler class to support the map values from Json to a POJO, so it should be load the file, convert it performing all type conversion.
+The application should have a ParameterHandler class to support the map of values from Json to a POJO; so it should load the file and convert it; performing all type conversion.
 
-The code below shown an example of ParameterHandler:
+The code below shown is an example of ParameterHandler:
 
 .. code-block:: java
 
@@ -59,9 +59,9 @@ The code below shown an example of ParameterHandler:
    }
 
 
-The POJO have to implement **org.onap.policy.common.parameters.ParameterGroup** interface or eventually extend **org.onap.policy.common.parameters.ParameterGroupImpl**. The last one already implements **validate()** method that performs error checking using validation **org.onap.policy.common.parameters.annotations**.
+The POJO has to implement the **org.onap.policy.common.parameters.ParameterGroup** interface or eventually extend **org.onap.policy.common.parameters.ParameterGroupImpl**. The last one already implements the **validate()** method that performs error checking using validation **org.onap.policy.common.parameters.annotations**.
 
-The code below shown an example of POJO:
+The code below shows an example of the POJO:
 
 .. code-block:: java
 
@@ -87,7 +87,7 @@ The code below shown an example of POJO:
    }
 
 
-The code shows below, is an example of Unit Test validation of the POJO PapParameterGroup:
+The code shown below, is an example of Unit Test validation of the POJO PapParameterGroup:
 
 .. code-block:: java
 
@@ -106,13 +106,13 @@ The code shows below, is an example of Unit Test validation of the POJO PapParam
 
 Using Spring boot framework
 ***************************
-Spring loads automatically the property file and put it available under the **org.springframework.core.env.Environment** Spring component.
+Spring loads the property file automatically and makes it available under the **org.springframework.core.env.Environment** Spring component.
 
 Environment
 +++++++++++
 A component can use Environment component directly.
 
-Environment component is not a good approach because there is not type conversion and error checking, but it could be useful when the name of the property you need to access changes dynamically.
+The Environment component is not a good approach because there is no type conversion or error checking, but it could be useful when the name of the property you need to access changes dynamically.
 
 .. code-block:: java
 
@@ -134,7 +134,7 @@ Annotation-based Spring configuration
 All annotation-based Spring configurations support the Spring Expression Language (SpEL), a powerful expression language that supports querying and manipulating an object graph at runtime.
 A documentation about SpEL could be found here: https://docs.spring.io/spring-framework/docs/3.0.x/reference/expressions.html.
 
-A component can use **org.springframework.beans.factory.annotation.Value**, which reads from properties, performs a type conversion and injects the value into the filed. There is not error checking, but it can assign default value if the property is not defined.
+A component can use **org.springframework.beans.factory.annotation.Value**, which reads from properties, performs a type conversion and injects the value into the field. There is no error checking, but it can assign a default value if the property is not defined.
 
 .. code-block:: java
 
@@ -178,9 +178,9 @@ ConfigurationProperties
        private String description;
    }
 
-In a scenario that we need to include into a POJO shown before, a class that implement **ParameterGroup** interface, we need to add the **org.onap.policy.common.parameters.validation.ParameterGroupConstraint** annotation. That annotation is configured to use **ParameterGroupValidator** that handles the conversion of a **org.onap.policy.common.parameters.BeanValidationResult** to a Spring validation.
+In a scenario where we need to include the properties in a POJO, as shown before, in a class that implements **ParameterGroup** interface, we need to add the **org.onap.policy.common.parameters.validation.ParameterGroupConstraint** annotation. That annotation is configured to use **ParameterGroupValidator**, which handles the conversion of a **org.onap.policy.common.parameters.BeanValidationResult** to a Spring validation.
 
-The code below shown how to add TopicParameterGroup parameter into ClRuntimeParameterGroup:
+The code below shows how to add the TopicParameterGroup parameter into acRuntimeParameterGroup:
 
 .. code-block:: java
 
@@ -197,7 +197,7 @@ A bean configured with ConfigurationProperties, is automatically a Spring compon
    @RequiredArgsConstructor
    public class Example {
 
-      private ClRuntimeParameterGroup parameters;
+      private acRuntimeParameterGroup parameters;
       ....
 
       public void method() {
@@ -206,7 +206,7 @@ A bean configured with ConfigurationProperties, is automatically a Spring compon
         .....
       }
 
-The code shows below, is an example of Unit Test validation of the POJO ClRuntimeParameterGroup:
+The code shown below, is an example of Unit Test validation of the POJO acRuntimeParameterGroup:
 
 .. code-block:: java
 
@@ -214,7 +214,7 @@ The code shows below, is an example of Unit Test validation of the POJO ClRuntim
 
    @Test
    void testParameters_NullTopicParameterGroup() {
-       final ClRuntimeParameterGroup parameters = CommonTestData.geParameterGroup();
+       final acRuntimeParameterGroup parameters = CommonTestData.geParameterGroup();
        parameters.setTopicParameterGroup(null);
        assertThat(validatorFactory.getValidator().validate(parameters)).isNotEmpty();
    }
index c6da41b..1515af5 100644 (file)
@@ -122,14 +122,13 @@ PAP supports the operations listed in the following table, via its REST API:
    "Undeploy policy", "Undeploys a policy from the PDPs"
    "Policy Status", "Queries the status of all policies"
    "Policy deployment status", "Queries the status of all deployed policies"
-   "PDP statistics", "Queries the statistics of PDPs"
    "Policy Audit", "Queries the audit records of policies"
 
-1.2 DMaaP API
+1.2 KAFKA API
 -------------
 
-PAP interacts with the PDPs via the DMaaP Message Router.  The messages listed
-in the following table are transmitted via DMaaP:
+PAP interacts with the PDPs via the kafka interface.  The messages listed
+in the following table are transmitted via Kafka:
 
 .. csv-table::
    :header: "Message", "Direction", "Description"
@@ -139,12 +138,12 @@ in the following table are transmitted via DMaaP:
    "PDP update", "Outgoing", "Assigns a PDP to a PDP Group and Subgroup; also deploys or undeploys policies from the PDP"
    "PDP state change", "Outgoing", "Changes the state of a PDP or all PDPs within a PDP Group or Subgroup"
 
-In addition, PAP generates notifications via the DMaaP Message Router when policies are successfully or unsuccessfully
+In addition, PAP generates notifications via the Kafka when policies are successfully or unsuccessfully
 deployed (or undeployed) from all relevant PDPs.
 
 Here is a sample notification:
 
-.. literalinclude:: notification/dmaap-pap-notif.json
+.. literalinclude:: notification/kafka-pap-notif.json
     :language: json
 
 
@@ -201,22 +200,6 @@ Here is a sample response:
 .. literalinclude:: response/consolidated-healthcheck-pap-resp.json
     :language: json
 
-.. csv-table::
-   :header: "/statistics"
-   :widths: 10
-
-   `Statistics PAP Swagger <./local-swagger.html#tag/StatisticsRestControllerV1>`_
-
-This operation allows statistics for PDP groups, PDP subgroups, and individual PDPs to be retrieved.
-
-.. note::
-  While this API is supported, most of the statistics are not currently updated; that work has been deferred to a later
-  release.
-
-Here is a sample response:
-
-.. literalinclude:: response/statistics-pap-resp.json
-    :language: json
 
 .. csv-table::
    :header: "/pdps/groups/{name}"
@@ -386,21 +369,6 @@ Here is a sample response:
 .. literalinclude:: response/deployed-policy-pap-resp.json
     :language: json
 
-.. csv-table::
-   :header: "/pdps/statistics"
-   :widths: 10
-
-   `Policy Statistics PAP Swagger <./local-swagger.html#tag/StatisticsRestControllerV1>`_
-
-This operation allows the PDP statistics to be retrieved for all registered PDPs.
-The result can be filtered based on PDP group, PDP subgroup & PDP instance.
-Along with record count, start time & end time as query parameters.
-
-Here is a sample response:
-
-.. literalinclude:: response/pdp-statistics-pap-resp.json
-    :language: json
-
 .. csv-table::
    :header: "/policies/audit"
    :widths: 10
@@ -424,15 +392,5 @@ The *PolicyAdministration* component (PAP) is initialized using a configuration
 
 The configuration file is a YAML file containing the relevant fields for configuring the REST server, Database and DMaaP connectivity and so on.
 
-3.1 Disable collection of PDP Statistics
-========================================
-
-This configuration is to inform PAP to not save the PDP statistics in the database.
-
-In *papParameters.yaml*, add or change the property savePdpStatisticsInDb to false.
-
-.. note::
-  By default, if the property is not present, it will be considered as false and
-  PDP statistics will not be saved in the database.
 
 End of Document
diff --git a/docs/pap/response/pdp-statistics-pap-resp.json b/docs/pap/response/pdp-statistics-pap-resp.json
deleted file mode 100644 (file)
index 77b0344..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-  "defaultGroup": {
-    "apex": [
-      {
-        "pdpInstanceId": "dev-policy-apex-pdp-0",
-        "timeStamp": "Apr 29, 2020, 6:15:29 PM",
-        "pdpGroupName": "defaultGroup",
-        "pdpSubGroupName": "apex",
-        "policyDeployCount": 0,
-        "policyDeploySuccessCount": 0,
-        "policyDeployFailCount": 0,
-        "policyExecutedCount": 0,
-        "policyExecutedSuccessCount": 0,
-        "policyExecutedFailCount": 0,
-        "engineStats": []
-      },
-      {
-        "pdpInstanceId": "dev-policy-apex-pdp-0",
-        "timeStamp": "Apr 29, 2020, 6:17:29 PM",
-        "pdpGroupName": "defaultGroup",
-        "pdpSubGroupName": "apex",
-        "policyDeployCount": 0,
-        "policyDeploySuccessCount": 0,
-        "policyDeployFailCount": 0,
-        "policyExecutedCount": 0,
-        "policyExecutedSuccessCount": 0,
-        "policyExecutedFailCount": 0,
-        "engineStats": []
-      },
-      {
-        "pdpInstanceId": "dev-policy-apex-pdp-0",
-        "timeStamp": "Apr 29, 2020, 6:19:29 PM",
-        "pdpGroupName": "defaultGroup",
-        "pdpSubGroupName": "apex",
-        "policyDeployCount": 0,
-        "policyDeploySuccessCount": 0,
-        "policyDeployFailCount": 0,
-        "policyExecutedCount": 0,
-        "policyExecutedSuccessCount": 0,
-        "policyExecutedFailCount": 0,
-        "engineStats": []
-      }
-    ]
-  }
-}
\ No newline at end of file
diff --git a/docs/pap/response/statistics-pap-resp.json b/docs/pap/response/statistics-pap-resp.json
deleted file mode 100644 (file)
index 836b595..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-    "code": 200,
-    "policyDeployFailureCount": 0,
-    "policyDeploySuccessCount": 0,
-    "policyDownloadFailureCount": 0,
-    "policyDownloadSuccessCount": 0,
-    "totalPdpCount": 0,
-    "totalPdpGroupCount": 0,
-    "totalPolicyDeployCount": 0,
-    "totalPolicyDownloadCount": 0
-}
index 7f5b193..d86de59 100644 (file)
@@ -29,7 +29,7 @@
     <parent>
         <groupId>org.onap.policy.parent</groupId>
         <artifactId>policy-parent</artifactId>
-        <version>4.1.3-SNAPSHOT</version>
+        <version>5.0.0-SNAPSHOT</version>
     </parent>
     <artifactId>integration</artifactId>
     <packaging>pom</packaging>
@@ -38,8 +38,7 @@
     <properties>
         <java.version>17</java.version>
         <!-- Note Well: For RELEASE/SNAPSHOT always set to the project version -->
-        <version.parent.resources>4.1.3-SNAPSHOT</version.parent.resources>
-        <version.parent.checkstyle>4.1.3-SNAPSHOT</version.parent.checkstyle>
+        <version.parent.resources>5.0.0-SNAPSHOT</version.parent.resources>
         <jacoco.destFile>${project.build.directory}/code-coverage/jacoco-ut.exec</jacoco.destFile>
         <!-- Default Sonar configuration -->
         <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
                     <dependency>
                         <groupId>org.onap.policy.parent</groupId>
                         <artifactId>checkstyle</artifactId>
-                        <version>${version.parent.checkstyle}</version>
+                        <version>[4.1.2,)</version>
                         <scope>compile</scope>
                     </dependency>
                 </dependencies>
diff --git a/integration/src/main/resources/release/14.0.0-ONAP_pf_release_data.csv b/integration/src/main/resources/release/14.0.0-ONAP_pf_release_data.csv
new file mode 100644 (file)
index 0000000..4322b17
--- /dev/null
@@ -0,0 +1,14 @@
+Repo, Last Tag Version,Snapshot Version,Changed Files,Docker Images
+policy/parent,4.1.4,4.1.5-SNAPSHOT,0,
+policy/docker,3.1.3,3.1.4-SNAPSHOT,1,'policy-jre-alpine':'policy-jdk-alpine':'policy-db-migrator'
+policy/common,2.1.3,2.1.4-SNAPSHOT,0,
+policy/models,3.1.3,3.1.4-SNAPSHOT,2,'policy-models-simulator'
+policy/api,3.1.3,3.1.4-SNAPSHOT,1,'policy-api'
+policy/pap,3.1.3,3.1.4-SNAPSHOT,1,'policy-pap'
+policy/apex-pdp,3.1.3,3.1.4-SNAPSHOT,1,'policy-apex-pdp'
+policy/drools-pdp,2.1.3,2.1.4-SNAPSHOT,1,'policy-drools'
+policy/xacml-pdp,3.1.3,3.1.4-SNAPSHOT,1,'policy-xacml-pdp'
+policy/distribution,3.1.3,3.1.4-SNAPSHOT,1,'policy-distribution'
+policy/clamp,7.1.3,7.1.4-SNAPSHOT,8,'policy-clamp-ac-pf-ppnt':'policy-clamp-ac-k8s-ppnt':'policy-clamp-ac-http-ppnt':'policy-clamp-ac-a1pms-ppnt':'policy-clamp-runtime-acm':'policy-clamp-acm-element-impl':'policy-clamp-ac-kserve-ppnt':'policy-clamp-ac-sim-ppnt'
+policy/gui,3.1.3,3.1.4-SNAPSHOT,2,'policy-gui'
+policy/drools-applications,2.1.3,2.1.4-SNAPSHOT,1,'policy-pdpd-cl'
index d70991f..4322b17 100644 (file)
@@ -1,14 +1,14 @@
 Repo, Last Tag Version,Snapshot Version,Changed Files,Docker Images
-policy/parent,4.1.2,4.1.3-SNAPSHOT,0,
-policy/docker,3.1.2,3.1.3-SNAPSHOT,7,'policy-jre-alpine':'policy-jdk-alpine':'policy-db-migrator'
-policy/common,2.1.2,2.1.3-SNAPSHOT,0,
-policy/models,3.1.2,3.1.3-SNAPSHOT,3,'policy-models-simulator'
-policy/api,3.1.2,3.1.3-SNAPSHOT,2,'policy-api'
-policy/pap,3.1.2,3.1.3-SNAPSHOT,2,'policy-pap'
-policy/apex-pdp,3.1.2,3.1.3-SNAPSHOT,3,'policy-apex-pdp'
-policy/drools-pdp,2.1.2,2.1.3-SNAPSHOT,2,'policy-drools'
-policy/xacml-pdp,3.1.2,3.1.3-SNAPSHOT,2,'policy-xacml-pdp'
-policy/distribution,3.1.2,3.1.3-SNAPSHOT,2,'policy-distribution'
-policy/clamp,7.1.2,7.1.3-SNAPSHOT,9,'policy-clamp-ac-pf-ppnt':'policy-clamp-ac-k8s-ppnt':'policy-clamp-ac-http-ppnt':'policy-clamp-ac-a1pms-ppnt':'policy-clamp-runtime-acm':'policy-clamp-acm-element-impl':'policy-clamp-ac-kserve-ppnt':'policy-clamp-ac-sim-ppnt'
-policy/gui,3.1.2,3.1.3-SNAPSHOT,1,'policy-gui'
-policy/drools-applications,2.1.2,2.1.3-SNAPSHOT,0,'policy-pdpd-cl'
+policy/parent,4.1.4,4.1.5-SNAPSHOT,0,
+policy/docker,3.1.3,3.1.4-SNAPSHOT,1,'policy-jre-alpine':'policy-jdk-alpine':'policy-db-migrator'
+policy/common,2.1.3,2.1.4-SNAPSHOT,0,
+policy/models,3.1.3,3.1.4-SNAPSHOT,2,'policy-models-simulator'
+policy/api,3.1.3,3.1.4-SNAPSHOT,1,'policy-api'
+policy/pap,3.1.3,3.1.4-SNAPSHOT,1,'policy-pap'
+policy/apex-pdp,3.1.3,3.1.4-SNAPSHOT,1,'policy-apex-pdp'
+policy/drools-pdp,2.1.3,2.1.4-SNAPSHOT,1,'policy-drools'
+policy/xacml-pdp,3.1.3,3.1.4-SNAPSHOT,1,'policy-xacml-pdp'
+policy/distribution,3.1.3,3.1.4-SNAPSHOT,1,'policy-distribution'
+policy/clamp,7.1.3,7.1.4-SNAPSHOT,8,'policy-clamp-ac-pf-ppnt':'policy-clamp-ac-k8s-ppnt':'policy-clamp-ac-http-ppnt':'policy-clamp-ac-a1pms-ppnt':'policy-clamp-runtime-acm':'policy-clamp-acm-element-impl':'policy-clamp-ac-kserve-ppnt':'policy-clamp-ac-sim-ppnt'
+policy/gui,3.1.3,3.1.4-SNAPSHOT,2,'policy-gui'
+policy/drools-applications,2.1.3,2.1.4-SNAPSHOT,1,'policy-pdpd-cl'
index 0d3131e..22db337 100755 (executable)
@@ -4,7 +4,7 @@
 # ============LICENSE_START================================================
 # ONAP
 # =========================================================================
-# Copyright (C) 2021-2022 Nordix Foundation.
+# Copyright (C) 2021-2022,2024 Nordix Foundation.
 # =========================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/pom.xml b/pom.xml
index debd984..511c6c1 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.onap.policy.parent</groupId>
     <artifactId>policy-parent</artifactId>
-    <version>4.1.3-SNAPSHOT</version>
+    <version>5.0.0-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <properties>
diff --git a/releases/4.1.3.yaml b/releases/4.1.3.yaml
new file mode 100644 (file)
index 0000000..f7610d0
--- /dev/null
@@ -0,0 +1,4 @@
+distribution_type: 'maven'
+version: '4.1.3'
+project: 'policy-parent'
+log_dir: 'policy-parent-maven-stage-master/1415/'
diff --git a/releases/4.1.4.yaml b/releases/4.1.4.yaml
new file mode 100644 (file)
index 0000000..7f2402b
--- /dev/null
@@ -0,0 +1,4 @@
+distribution_type: 'maven'
+version: '4.1.4'
+project: 'policy-parent'
+log_dir: 'policy-parent-maven-stage-master/1416/'
index 873a85d..2648a57 100644 (file)
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.onap.policy.parent</groupId>
         <artifactId>policy-parent</artifactId>
-        <version>4.1.3-SNAPSHOT</version>
+        <version>5.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>policy-parent-resources</artifactId>
index 68aaed8..295674e 100644 (file)
@@ -2,9 +2,9 @@
 # Note that these variables cannot be structured (e.g. : version.release or version.snapshot etc... )
 # because they are used in Jenkins, whose plug-in doesn't support
 
-major=4
-minor=1
-patch=3
+major=5
+minor=0
+patch=0
 
 base_version=${major}.${minor}.${patch}