blob: c98d2b02c18439625945d3d0c2bf353da5655090 [file] [log] [blame]
openapi: 3.0.0
info:
title: 'A1-P Policy Management Service'
version: 1.1.x
description: |
API for Policy Management Service.
© 2019, O-RAN Alliance.
All rights reserved.
externalDocs:
description: 'ORAN-WG2.A1.AP-v01.01 A1 interface: Application protocol'
url: 'https://www.o-ran.org/specifications'
servers:
- url: '{apiRoot}/A1-P/v1'
variables:
apiRoot:
default: 'https://example.com'
description: 'apiRoot as defined in clause 4.2.1 in ORAN-WG2.A1.AP'
paths:
'/policies':
get:
operationId: a1.get_all_policies
description: 'Get all policies including their enforcement status'
tags:
- All Policy Objects
responses:
200:
description: 'Array of all policies and their enforcement status'
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/PolicyObject"
minItems: 0
'/policies/identities':
get:
operationId: a1.get_all_policy_identities
description: 'Get all policy identities'
tags:
- All Policy Identities
responses:
200:
description: 'Array of all policy identities'
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/PolicyId"
minItems: 0
'/policies/status':
get:
operationId: a1.get_all_policy_status
description: 'Get enforcement status for all policy instances'
tags:
- All Policy Status Objects
responses:
200:
description: 'Array of all policy identities and their related enforcement status'
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/PolicyStatusObject"
minItems: 0
'/policies/{policyId}':
parameters:
- name: policyId
in: path
required: true
schema:
"$ref": "#/components/schemas/PolicyId"
put:
operationId: a1.put_policy
description: 'Create, or update, a policy'
tags:
- Individual Policy Object
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/PolicyObject"
responses:
200:
description: 'The policy was updated'
content:
application/json:
schema:
"$ref": "#/components/schemas/PolicyObject"
201:
description: 'The policy was created'
content:
application/json:
schema:
"$ref": "#/components/schemas/PolicyObject"
headers:
Location:
description: 'Contains the URI of the created policy'
required: true
schema:
type: string
400:
"$ref": "#/components/responses/400-BadRequest"
callbacks:
policyNotification:
'$request.body#/notificationDestination':
post:
description: 'Notify about enforcement status changes for this policy'
requestBody:
required: true
content:
application/json:
schema:
"$ref": "#/components/schemas/PolicyStatusObject"
responses:
204:
description: 'Notification received'
get:
operationId: a1.get_policy
description: 'Query single policy'
tags:
- Individual Policy Object
responses:
200:
description: 'The requested policy'
content:
application/json:
schema:
"$ref": "#/components/schemas/PolicyObject"
404:
"$ref": "#/components/responses/404-NotFound"
delete:
operationId: a1.delete_policy
description: 'Delete policy'
tags:
- Individual Policy Object
responses:
204:
description: 'The policy was deleted'
404:
"$ref": "#/components/responses/404-NotFound"
'/policies/{policyId}/status':
parameters:
- name: policyId
in: path
required: true
schema:
"$ref": "#/components/schemas/PolicyId"
get:
operationId: a1.get_policy_status
description: 'Get the enforcement status of a policy'
tags:
- Individual Policy Status Object
responses:
200:
description: 'The requested enforcement status'
content:
application/json:
schema:
"$ref": "#/components/schemas/PolicyStatusObject"
404:
"$ref": "#/components/responses/404-NotFound"
'/policytypes':
get:
operationId: a1.get_all_policytypes
description: 'Get all policy type schemas'
tags:
- All Policy Types
responses:
200:
description: 'Array of all policy type schemas'
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/PolicyTypeSchema"
minItems: 0
'/policytypes/identities':
get:
operationId: a1.get_all_policytypes_identities
description: 'Get all policy type identities'
tags:
- All Policy Type Identities
responses:
200:
description: 'Array of all policy type identities'
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/PolicyTypeId"
minItems: 0
'/policytypes/{policyTypeId}':
parameters:
- name: policyTypeId
in: path
required: true
schema:
"$ref": "#/components/schemas/PolicyTypeId"
get:
operationId: a1.get_policytypes
description: 'Get the schema for a policy type'
tags:
- Individual Policy Type
responses:
200:
description: 'The policy type schema'
content:
application/json:
schema:
"$ref": "#/components/schemas/PolicyTypeSchema"
404:
"$ref": "#/components/responses/404-NotFound"
'/policytypes/subscription':
put:
operationId: a1.put_policytypes_subscription
description: 'Subscribe to notification when any change is made to supported policy types'
tags:
- Policy Types Subscription Object
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/SubscriptionObject"
responses:
200:
description: 'The subscription was updated'
201:
description: 'The subscription was created'
callbacks:
policyTypesNotification:
'$request.body#/notificationDestination':
post:
description: 'Notify about any change in supported policy types'
responses:
204:
description: 'Notification received'
get:
operationId: a1.get_policytypes_subscription
description: 'Get current notification destination'
tags:
- Policy Types Subscription Object
responses:
200:
description: 'The current notification destination'
content:
application/json:
schema:
"$ref": "#/components/schemas/SubscriptionObject"
404:
"$ref": "#/components/responses/404-NotFound"
components:
schemas:
#
# Representation objects
#
PolicyStatusObject:
type: object
properties:
policyId:
"$ref": "#/components/schemas/PolicyId"
enforceStatus:
"$ref": "#/components/schemas/EnforcementStatusType"
enforceReason:
"$ref": "#/components/schemas/EnforcementReasonType"
required:
- policyId
- enforceStatus
PolicyObject:
description: 'A policy object, including its identification, type information, its notification destination, and optionally its enforcement status.'
type: object
properties:
policyId:
"$ref": "#/components/schemas/PolicyId"
policyTypeId:
"$ref": "#/components/schemas/PolicyTypeId"
policyClause:
"$ref": "#/components/schemas/PolicyClause"
notificationDestination:
"$ref": "#/components/schemas/NotificationDestination"
enforceStatus:
"$ref": "#/components/schemas/EnforcementStatusType"
required:
- policyId
- policyTypeId
- policyClause
- notificationDestination
PolicyTypeSchema:
description: 'The JSON Schema for a policy type. All policies of a policy type shall validate against this schema.'
type: object
properties:
description:
type: string
properties:
type: object
title:
type: string
type:
type: string
required:
- description
- properties
- title
- type
ProblemDetails:
description: 'A problem detail to carry details in a HTTP response according to RFC 7807 extended with A1 specific attributes'
type: object
properties:
type:
type: string
title:
type: string
status:
type: number
detail:
type: string
instance:
type: string
policyErrorCode:
"$ref": "#/components/schemas/PolicyErrorType"
invalidParams:
type: array
items:
"$ref": "#/components/schemas/InvalidParam"
minItems: 1
SubscriptionObject:
description: 'A subscription object used for specifying the destination where to send notifications.'
type: object
properties:
notificationDestination:
"$ref": "#/components/schemas/NotificationDestination"
required:
- notificationDestination
#
# Structured data types
#
InvalidParam:
description: 'Used in a ProblemDetails to indicate a specific invalid parameter'
type: object
properties:
param:
type: string
reason:
type: string
required:
- param
PolicyClause:
description: 'The schema for a generic policy clause that shall be valid for all different specific policy types.'
type: object
properties:
scope:
"$ref": "#/components/schemas/ScopeIdentifier"
statement:
description: 'The statement for a specific policy type. The schema is specified by a specific policy type.'
type: object
required:
- scope
- statement
ScopeIdentifier:
description: 'The schema for a generic scope identifier that shall be valid for all different specific policy types.'
type: object
properties:
ueId:
description: 'UE identifier based on RAN UE Id'
type: string
groupId:
description: 'Identifier of a pre-defined group of UEs, SPID'
type: string
sliceId:
description: 'Network slice identifie, NSSAI'
type: string
qosId:
description: 'QoS identifer, 5QI'
type: string
cellId:
description: 'Network resource identifier for a cell'
type: string
#
# Simple data types
#
PolicyId:
description: 'Policy identifier assigned by the A1-P Consumer when a policy is created'
type: string
PolicyTypeId:
description: 'Policy type identifier assigned by the A1-P Provider'
pattern: "^(STD|EXT)_[a-zA-Z]+_(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$"
type: string
NotificationDestination:
description: 'A complete URI defined according to IETF RFC 3986 where to send notifications'
type: string
nullable: true
#
# Enumerations
#
EnforcementStatusType:
description: 'Indicating if a policy is being enforced or not'
type: string
enum:
- "ENFORCED"
- "NOT_ENFORCED"
- "UNDEFINED"
EnforcementReasonType:
description: 'Indicating the reason why a policy is not being enforced'
anyOf:
- type: string
enum:
- "100"
- "200"
- "300"
- "800"
- type: string
PolicyErrorType:
description: 'Represents information that can be provided in addition to the HTTP response error code. Corresponds to the "cause" attribute defined in 3GPP specification 29.501.'
anyOf:
- type: string
enum:
- "CONF_POLICY_ID"
- "BAD_REQ_MISSING_PARAM"
- type: string
responses:
400-BadRequest:
description: 'Object in payload not properly formulated or not related to the method'
content:
application/problem+json:
schema:
"$ref": "#/components/schemas/ProblemDetails"
404-NotFound:
description: 'No resource found at the URI'
content:
application/problem+json:
schema:
"$ref": "#/components/schemas/ProblemDetails"
405-MethodNotAllowed:
description: 'Method not allowed for the URI'
content:
application/problem+json:
schema:
"$ref": "#/components/schemas/ProblemDetails"