Add PTP Notification API definitions spec

The communication between the Sidecar and the application is done
via a REST API. This document defines the API and data model.

Story: 2008529
Task: 41943

Signed-off-by: Udi Schwager <udi.schwager@windriver.com>
Change-Id: I8eed27322433f565c66c1a566ac8bbef0b8903b8
This commit is contained in:
Udi Schwager 2021-02-26 19:53:15 -05:00
parent 1ca32529ad
commit 0a840ffe37
3 changed files with 393 additions and 0 deletions

View File

@ -0,0 +1,315 @@
============================================
PTP Status Notifications API Definition v1
============================================
This document defines how an hosted application can subscribe for receving PTP
status notifications from StarlingX platform and also how to pull notifications
on demand.
The interaction between the application and the platform is done with the
use of a Sidecar, resides in the same pod.
The port of the Sidecar is exposed to the application by a downward API and
the address is localhost of the pod where the application and the Sidecar
are running on. For example: http://127.0.0.1:{port}
--------------------
Create Subscription
--------------------
As the result of successfully executing this method, a new
subscription resource will be created and a variable value
(subscriptionId) will be used for representing this
resource. An initial PTP notification will be triggered,
showing the initial status of the PTP resource followed
by PTP status notifications if there is a change to the
PTP status.
************************************************
Subscribe to receiving PTP status notifications
************************************************
.. rest_method:: POST /ocloudNotifications/v1/subscriptions
**Normal response codes**
201
**Error response codes**
badRequest (400), itemNotFound (404), conflict(409)
**Request parameters**
.. csv-table::
:header: "Parameter", "Style", "Type", "Description"
:widths: 20, 20, 20, 60
"ResourceType", "plain", "xsd:string", "The resource to subscribe to, currently only ``PTP`` is supported."
"ResourceQualifier", "plain", "xsd:string", "The node name where PTP resides: ``*`` for all worker nodes, ``.`` for worker node where the application resides, node name specified by the downward API"
"EndpointUri", "plain", "xsd:string", "Endpoint URI (a.k.a callback URI), e.g. http://127.0.0.1:8080/resourcestatus/ptp"
**Response parameters**
.. csv-table::
:header: "Parameter", "Style", "Type", "Description"
:widths: 20, 20, 20, 60
"SubscriptionId", "plain", "csapi:UUID", "Identifier for the created subscription resource."
"UriLocation", "plain", "xsd:string", "The URI location to query the subscription resource created."
"ResourceType", "plain", "xsd:string", "The resource to subscribe to, currently only ``PTP`` is supported."
"ResourceQualifier", "plain", "xsd:string", "The node name where PTP resides, ``NodeName``: ``*`` for all worker nodes, ``.`` for worker node where the application resides, ``node name`` specified by the downward API"
"EndpointUri", "plain", "xsd:string", "Endpoint URI (a.k.a callback URI), e.g. http://127.0.0.1:8080/resourcestatus/ptp"
::
{
"ResourceType": "PTP",
"ResourceQualifier": {
"NodeName": "controller-0"
},
"EndpointUri": "http://127.0.0.1:9090/v1/resource_status/ptp"
}
::
{
"EndpointUri": "http://127.0.0.1:9090/v1/resource_status/ptp",
"ResourceQualifier": {
"NodeName": "controller-0"
},
"ResourceType": "PTP",
"SubscriptionId": "a904a444-7e30-11eb-9fd0-82e7589e5f61",
"UriLocation": "http://127.0.0.1:8080/ocloudNotifications/v1/subscriptions/a904a444-7e30-11eb-9fd0-82e7589e5f61"
}
----------------------
Manange Subscriptions
----------------------
******************************
Query subscription resources
******************************
.. rest_method:: rest_method:: GET /ocloudNotifications/v1/subscriptions
**Normal response codes**
200
**Error response codes**
itemNotFound (404)
**Response parameters**
.. csv-table::
:header: "Parameter", "Style", "Type", "Description"
:widths: 20, 20, 20, 60
"SubscriptionId", "plain", "csapi:UUID", "Identifier for the created subscription resource."
"UriLocation", "plain", "xsd:string", "The URI location to query the subscription resource created."
"ResourceType", "plain", "xsd:string", "The resource to subscribe to, currently only ``PTP`` is supported."
"ResourceQualifier", "plain", "xsd:string", "The node name where PTP resides, ``NodeName``: ``*`` for all worker nodes, ``.`` for worker node where the application resides, ``node name`` specified by the downward API"
"EndpointUri", "plain", "xsd:string", "Endpoint URI (a.k.a callback URI), e.g. http://127.0.0.1:8080/resourcestatus/ptp"
::
{
"EndpointUri": "http://127.0.0.1:9090/v1/resource_status/ptp",
"ResourceQualifier": {
"NodeName": "controller-0"
},
"ResourceType": "PTP",
"SubscriptionId": "a904a444-7e30-11eb-9fd0-82e7589e5f61",
"UriLocation": "http://127.0.0.1:8080/ocloudNotifications/v1/subscriptions/a904a444-7e30-11eb-9fd0-82e7589e5f61"
}
{
"EndpointUri": "http://127.0.0.1:9090/v1/resource_status/ptp_cluster",
"ResourceQualifier": {
"NodeName": "*"
},
"ResourceType": "PTP",
"SubscriptionId": "e614a666-7e30-11eb-9fd0-2e87589e8a30",
"UriLocation": "http://127.0.0.1:8080/ocloudNotifications/v1/subscriptions/e614a666-7e30-11eb-9fd0-2e87589e8a30"
}
This operation does not accept a request body.
****************************************
Query individual subscription resource
****************************************
.. rest_method:: rest_method:: GET /ocloudNotifications/v1/{SubscriptionId}
**Normal response codes**
200
**Error response codes**
itemNotFound (404)
**Request parameters**
.. csv-table::
:header: "Parameter", "Style", "Type", "Description"
:widths: 20, 20, 20, 60
"SubscriptionId", "plain", "csapi:UUID", "Identifier for the created subscription resource."
**Response parameters**
.. csv-table::
:header: "Parameter", "Style", "Type", "Description"
:widths: 20, 20, 20, 60
"SubscriptionId", "plain", "csapi:UUID", "Identifier for the created subscription resource."
"UriLocation", "plain", "xsd:string", "The URI location to query the subscription resource created."
"ResourceType", "plain", "xsd:string", "The resource to subscribe to, currently only ``PTP`` is supported."
"ResourceQualifier", "plain", "xsd:string", "The node name where PTP resides, ``NodeName``: ``*`` for all worker nodes, ``.`` for worker node where the application resides, ``node name`` specified by the downward API"
"EndpointUri", "plain", "xsd:string", "Endpoint URI (a.k.a callback URI), e.g. http://127.0.0.1:8080/resourcestatus/ptp"
::
{
"EndpointUri": "http://127.0.0.1:9090/v1/resource_status/ptp",
"ResourceQualifier": {
"NodeName": "controller-0"
},
"ResourceType": "PTP",
"SubscriptionId": "a904a444-7e30-11eb-9fd0-82e7589e5f61",
"UriLocation": "http://127.0.0.1:8080/ocloudNotifications/v1/subscriptions/a904a444-7e30-11eb-9fd0-82e7589e5f61"
}
This operation does not accept a request body
****************************************
Delete individual subscription resource
****************************************
.. rest_method:: rest_method:: DELETE /ocloudNotifications/v1/{SubscriptionId}
**Normal response codes**
204
**Error response codes**
itemNotFound (404)
**Request parameters**
.. csv-table::
:header: "Parameter", "Style", "Type", "Description"
:widths: 20, 20, 20, 60
"SubscriptionId", "plain", "csapi:UUID", "Identifier for the created subscription resource."
This operation does not accept a request body.
--------------------------
Pull Status Notifications
--------------------------
******************************
Pull PTP status notifications
******************************
.. rest_method:: rest_method:: GET /ocloudNotifications/{ResourceType}/CurrentState
**Normal response codes**
200
**Error response codes**
itemNotFound (404)
**Request parameters**
.. csv-table::
:header: "Parameter", "Style", "Type", "Description"
:widths: 20, 20, 20, 60
"ResourceType", "plain", "xsd:string", "The resource to subscribe to, currently only ``PTP`` is supported."
This operation does not accept a request body.
**Response parameters**
.. csv-table::
:header: "Parameter", "Style", "Type", "Description"
:widths: 20, 20, 20, 60
"EventData", "plain", ""xsd:string, "Describes the synchronization state for PTP, State: ``Freerun``, ``Locked``, ``Holdover``."
"EventTimestamp", "plain", "xsd:float", "This is the time that the event was detected (elapsed seconds since epoch time)."
"ResourceQualifier", "plain", "xsd:string", "The node name where PTP resides, ``NodeName``: ``*`` for all worker nodes, ``.`` for worker node where the application resides, ``node name`` specified by the downward API"
"ResourceType", "plain", "xsd:string", "The resource to subscribe to, currently only ``PTP`` is supported."
::
{
"EventData": {
"State": "Freerun"
},
"EventTimestamp": 1614969298.8842714,
"ResourceQualifier": {
"NodeName": "controller-0"
},
"ResourceType": "PTP"
}
This operation does not accept a request body.
--------------------
Push Notifications
--------------------
After a successful subscription (a subscription resource was created)
the application (e.g. vDU) will be able to receive PTP status notifications.
Note that notifications are sent to the application when there is a change
to the PTP synchronization state.
The notification will be sent to the endpoint reference (EndpointUri) provided
by the application during the creation of the subscription resource.
StarlingX platform includes the notification data in the payload body of
the POST request to the application's EndpointURI (http://127.0.0.1:{port}/{path}).
************************************************************
Send PTP status notifications to the application subscribed
************************************************************
.. rest_method:: POST {EndpointUri}
**Normal response codes**
204
**Error response codes**
badRequest (400), itemNotFound (404), tiemout(408)
**Request parameters**
.. csv-table::
:header: "Parameter", "Style", "Type", "Description"
:widths: 20, 20, 20, 60
"EventData", "plain", ""xsd:string, "Describes the synchronization state for PTP, State: ``Freerun``, ``Locked``, ``Holdover``."
"EventTimestamp", "plain", "xsd:float", "This is the time that the event was detected (elapsed seconds since epoch time)."
"ResourceQualifier", "plain", "xsd:string", "The node name where PTP resides, ``NodeName``: ``*`` for all worker nodes, ``.`` for worker node where the application resides, ``node name`` specified by the downward API"
"ResourceType", "plain", "xsd:string", "The resource to subscribe to, currently only ``PTP`` is supported."
::
{
"EventData": {
"State": "Holdover"
},
"EventTimestamp": 1714929761.8942328,
"ResourceQualifier": {
"NodeName": "controller-0"
},
"ResourceType": "PTP"
}

64
api-ref/source/conf.py Normal file
View File

@ -0,0 +1,64 @@
# 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.
#
# stx-config API reference documentation build configuration file
#
# This file is execfile()d with the current directory set to
# its containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
import os
import sys
extensions = [
'openstackdocstheme',
'os_api_ref',
]
html_theme = 'starlingxdocs'
html_theme_options = {
"sidebar_dropdown": "api_ref",
"sidebar_mode": "toc",
}
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.insert(0, os.path.abspath('../../'))
sys.path.insert(0, os.path.abspath('../'))
sys.path.insert(0, os.path.abspath('./'))
# The suffix of source filenames.
source_suffix = '.rst'
# The master toctree document.
master_doc = 'index'
# General information about the project.
openstackdocs_repo_name = 'openstack/ptp-notification-armada-app'
openstackdocs_auto_name = False
project = u'PTP Status Notifications'
openstackdocs_bug_project = 'starlingx'
openstackdocs_bug_tag = 'openstack/ptp-notification-armada-app'
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
add_module_names = False
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'native'
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass
# [howto/manual]).
latex_documents = [
('index', 'stx-ptpnotifications.tex', u'stx-ptpnotifications API Documentation',
u'StarlingX', 'manual'),
]

14
api-ref/source/index.rst Normal file
View File

@ -0,0 +1,14 @@
===========================================
API Definition for PTP Status Notifications
===========================================
API Reference for integrating StarlingX with an application that needs to receive PTP status notifications.
Search PTP Notifications API content using the :ref:`search page <search>`.
--------------
API definition
--------------
.. toctree::
:maxdepth: 2
api_definition_v1_ptp_notifications