blob: 98c5b1e79a87b8ab47771dd9c1b92a037339e529 [file] [log] [blame]
# ============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 a CM operation"
version: 1.0.0
servers:
- url: /policy-executor/api
tags:
- name: policy-executor
description: "Execute all your policies"
paths:
/v1/{action}:
post:
description: "Fire a Policy action"
operationId: executePolicyAction
parameters:
- $ref: '#/components/parameters/authorizationInHeader'
- $ref: '#/components/parameters/actionInPath'
requestBody:
required: true
description: "The action request body"
content:
application/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: 'permit'"
example: "permit"
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: 'permit','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"
authorizationInHeader:
name: Authorization
in: header
description: "Bearer token may be used to identify client as part of a policy"
schema:
type: string
security:
- bearerAuth: []