Add Policy Executor Open API Interface definition

- OPenApi in RTD only (for now)
- Bear authentication included in OpenApi
- Placeholder RTD page (to be completed upon feature delivery)
- For consistency (and color coding in editors) I put all Description and Example strings inside double qoutes "..."

Issue-ID: CPS-2291
Change-Id: I7f16cdce2a06cb011997005fa8b86b54c044304a
Signed-off-by: ToineSiebelink <toine.siebelink@est.tech>
diff --git a/docs/api/swagger/policy-executor/openapi.yaml b/docs/api/swagger/policy-executor/openapi.yaml
new file mode 100644
index 0000000..868f2da
--- /dev/null
+++ b/docs/api/swagger/policy-executor/openapi.yaml
@@ -0,0 +1,214 @@
+#  ============LICENSE_START=======================================================
+#  Copyright (C) 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.
+#  You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+#  SPDX-License-Identifier: Apache-2.0
+#  ============LICENSE_END=========================================================
+
+openapi: 3.0.3
+info:
+  title: Policy Executor
+  description: "Allows NCMP to execute a policy defined by a third party implementation before proceeding with an operation"
+  version: 1.0.0
+servers:
+  - url: /policy-executor
+tags:
+  - name: policy-executor
+    description: "Execute all your policies"
+paths:
+  /policy-executor/api/v1/{action}:
+    post:
+      description: "Fire a Policy action"
+      operationId: executePolicyAction
+      parameters:
+        - $ref: '#/components/parameters/actionInPath'
+      requestBody:
+        required: true
+        description: "The action request body"
+        content:
+          application/3gpp-json-patch+json:
+            schema:
+              $ref: '#/components/schemas/PolicyExecutionRequest'
+      tags:
+        - policy-executor
+      responses:
+        '200':
+          description: "Successful policy execution"
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PolicyExecutionResponse'
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+
+components:
+  securitySchemes:
+    bearerAuth:
+      type: http
+      description: "Bearer token (from client that called CPS-NCMP),used by policies to identify the client"
+      scheme: bearer
+  schemas:
+    ErrorMessage:
+      type: object
+      title: Error
+      properties:
+        status:
+          type: string
+        message:
+          type: string
+        details:
+          type: string
+
+    Payload:
+      type: object
+      properties:
+        targetFdn:
+          type: string
+          description: "The complete FDN (Fully Distinguished Name) for the element to be changed"
+          example: "/Subnetwork=Ireland/MeContext=Athlone/ManagedElement=Athlone/SomeFunction=1/Cell=12"
+        cmHandleId:
+          type: string
+          description: "The CM handle ID (optional)"
+          example: "F811AF64F5146DFC545EC60B73DE948E"
+        resourceIdentifier:
+          type: string
+          description: "The resource identifier (optional)"
+          example: "ManagedElement=Athlone/SomeFunction=1/Cell=12"
+        cmChangeRequest:
+          type: object
+          description: "The content of the change to be made"
+          example: '{"Cell":[{"id":"Cell-id","attributes":{"administrativeState":"UNLOCKED"}}]}'
+      required:
+        - targetFdn
+        - cmChangeRequest
+
+    PolicyExecutionRequest:
+      type: object
+      properties:
+        payloadType:
+          type: string
+          description: "The type of payload. Currently supported options: 'CM_Write'"
+          example: "CM_Write"
+        decisionType:
+          type: string
+          description: "The type of decision. Currently supported options: 'Allow'"
+          example: "Allow"
+        payload:
+          type: array
+          items:
+            $ref: '#/components/schemas/Payload'
+      required:
+        - payloadType
+        - decisionType
+        - payload
+
+    PolicyExecutionResponse:
+      type: object
+      properties:
+        decisionId:
+          type: string
+          description: "Unique ID for the decision (for auditing purposes)"
+          example: "550e8400-e29b-41d4-a716-446655440000"
+        decision:
+          type: string
+          description: "The decision outcome. Currently supported values: 'Allow','Deny'"
+          example: "Deny"
+        message:
+          type: string
+          description: "Additional information regarding the decision outcome"
+          example: "Object locked due to recent change"
+      required:
+        - decisionId
+        - decision
+        - message
+
+  responses:
+    NotFound:
+      description: "The specified resource was not found"
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ErrorMessage'
+          example:
+            status: 404
+            message: "Resource Not Found"
+            details: "The requested resource is not found"
+    Unauthorized:
+      description: "Unauthorized request"
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ErrorMessage'
+          example:
+            status: 401
+            message: "Unauthorized request"
+            details: "This request is unauthorized"
+    Forbidden:
+      description: "Request forbidden"
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ErrorMessage'
+          example:
+            status: 403
+            message: "Request Forbidden"
+            details: "This request is forbidden"
+    BadRequest:
+      description: "Bad request"
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ErrorMessage'
+          example:
+            status: 400
+            message: "Bad Request"
+            details: "The provided request is not valid"
+
+    InternalServerError:
+      description: "Internal server error"
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ErrorMessage'
+          example:
+            status: 500
+            message: "Internal Server Error"
+            details: "Internal server error occurred"
+
+    NotImplemented:
+      description: "Method not (yet) implemented"
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ErrorMessage'
+          example:
+            status: 501
+            message: "Not Implemented"
+            details: "Method not implemented"
+
+  parameters:
+    actionInPath:
+      name: action
+      in: path
+      description: "The policy action. Currently supported options: 'Execute'"
+      required: true
+      schema:
+        type: string
+        example: "Execute"
+security:
+  - bearerAuth: []
diff --git a/docs/design.rst b/docs/design.rst
index af1f5ab..52f977a 100644
--- a/docs/design.rst
+++ b/docs/design.rst
@@ -60,11 +60,20 @@
 Consumed APIs
 =============
 
-CPS Core uses API's from the following ONAP components
+DMI-Plugin
+----------
 
-* DMI-Plugin: REST based interface which is used to provide integration
-  and allow the DMI registry API's have access to the corresponding NCMP API's within CPS Core.
-  More information on the DMI-Plugins offered APIs can be found on the :ref:`DMI-Plugin's Design Page <onap-cps-ncmp-dmi-plugin:design>`.
+DMI-Plugin is a REST based interface which is used to provide integration
+and allow the DMI registry API's have access to the corresponding NCMP API's within CPS Core.
+More information on the DMI-Plugins offered APIs can be found on the :ref:`DMI-Plugin's Design Page <onap-cps-ncmp-dmi-plugin:design>`.
+
+Policy-Executor
+---------------
+
+.. toctree::
+   :maxdepth: 1
+
+   policy-executor.rst
 
 CPS Path
 ========
diff --git a/docs/policy-executor.rst b/docs/policy-executor.rst
new file mode 100644
index 0000000..b934a57
--- /dev/null
+++ b/docs/policy-executor.rst
@@ -0,0 +1,23 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+.. Copyright (C) 2024 Nordix Foundation
+
+.. DO NOT CHANGE THIS LABEL FOR RELEASE NOTES - EVEN THOUGH IT GIVES A WARNING
+.. _policy_executor:
+
+
+Policy Executor
+###############
+
+.. toctree::
+   :maxdepth: 1
+
+Introduction
+============
+
+Work In Progress: This feature is not yet completed and does not affect current NCMP functionality.
+
+Consumed APIs
+-------------
+
+:download:`Policy Executor OpenApi Specification <api/swagger/policy-executor/openapi.yaml>`