Updated patchset 2 comments Updated Patchset 1 comments Change-Id: I8aa338d89137b7d53ff7e8a37f1fb964f74684c7 Signed-off-by: Juanita Balaraj <juanita.balaraj@windriver.com>
		
			
				
	
	
		
			361 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			361 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
 | 
						|
.. yxg1614092306444
 | 
						|
.. _integrate-the-application-with-notification-client-sidecar:
 | 
						|
 | 
						|
==========================================================
 | 
						|
Integrate the Application with Notification Client Sidecar
 | 
						|
==========================================================
 | 
						|
 | 
						|
.. only:: partner
 | 
						|
 | 
						|
   .. include:: /_includes/integrate-application-with-notification-client-sidecar.rest
 | 
						|
      :start-after: shortdesc-begin
 | 
						|
      :end-before: shortdesc-end
 | 
						|
 | 
						|
.. rubric:: |context|
 | 
						|
 | 
						|
This section provides an example of kubernetes deployment of the sidecar and a
 | 
						|
simulated application. The user application must support querying and handling
 | 
						|
responses for either of the API definitions available at:
 | 
						|
 | 
						|
**See**:
 | 
						|
 | 
						|
-  https://docs.starlingx.io/api-ref/ptp-notification-armada-app/api_ptp_notifications_definition_v1.html
 | 
						|
 | 
						|
-  https://docs.starlingx.io/api-ref/ptp-notification-armada-app/api_ptp_notifications_definition_v2.html
 | 
						|
 | 
						|
 | 
						|
.. Cole please confirm if this is required
 | 
						|
 | 
						|
The integration between the application is done with the use of a Sidecar. The
 | 
						|
Sidecar runs as a container along with the application in the same pod. The
 | 
						|
application and the Sidecar communicate via a REST API. See the figure below.
 | 
						|
 | 
						|
.. only:: partner
 | 
						|
 | 
						|
   .. include:: /_includes/integrate-application-with-notification-client-sidecar.rest
 | 
						|
      :start-after: note-begin
 | 
						|
      :end-before: note-end
 | 
						|
 | 
						|
To use the v1 API, deploy ``starlingx/notificationclient-base:stx.5.0-v1.0.4``
 | 
						|
as the sidecar container.
 | 
						|
 | 
						|
To use the v2 API, deploy ``starlingx/notificationclient-base:stx.9.0-v2.1.1``
 | 
						|
as the sidecar container.
 | 
						|
 | 
						|
.. rubric:: |prereq|
 | 
						|
 | 
						|
The following prerequisites are required before the integration:
 | 
						|
 | 
						|
.. only:: partner
 | 
						|
 | 
						|
   .. include:: /_includes/integrate-application-with-notification-client-sidecar.rest
 | 
						|
      :start-after: prereq-begin
 | 
						|
      :end-before: prereq-end
 | 
						|
 | 
						|
-   The cloud is configured with a node that supports the Subordinate mode (Secondary mode).
 | 
						|
 | 
						|
-   The cloud is labeled with **ptp-registration=true**, and **ptp-notification=true**.
 | 
						|
 | 
						|
-   The **ptp-notification-armada-app** application is installed successfully.
 | 
						|
 | 
						|
-   The application supports the |PTP| Notifications API.
 | 
						|
 | 
						|
 | 
						|
The config provided below is for illustrative purposes and is not validated.
 | 
						|
A suitable user-supplied container would have to be run in the same pod and
 | 
						|
configured to make API calls to the notificationclient-base container.
 | 
						|
 | 
						|
.. note::
 | 
						|
 | 
						|
    The following example is for ``ptp-notification`` v2 API. To integrate
 | 
						|
    with ``ptp-notification`` v1 API, change the image from ``starlingx/notificationclient-base:stx.9.0-v2.1.1``
 | 
						|
    to ``starlingx/notificationclient-base:stx.5.0-v1.0.4``.
 | 
						|
 | 
						|
.. parsed-literal::
 | 
						|
 | 
						|
    apiVersion: apps/v1
 | 
						|
    kind: Deployment
 | 
						|
    metadata:
 | 
						|
      name: ptp-notification-example
 | 
						|
      namespace: ptpexample
 | 
						|
    spec:
 | 
						|
      replicas: 1
 | 
						|
      selector:
 | 
						|
        matchLabels:
 | 
						|
          app: ptp-notification-example
 | 
						|
      template:
 | 
						|
        metadata:
 | 
						|
          namespace: ptpexample
 | 
						|
          labels:
 | 
						|
            app: ptp-notification-example
 | 
						|
            release: RELEASE-NAME
 | 
						|
        spec:
 | 
						|
          affinity:
 | 
						|
            nodeAffinity:
 | 
						|
              requiredDuringSchedulingIgnoredDuringExecution:
 | 
						|
                nodeSelectorTerms:
 | 
						|
                - matchExpressions:
 | 
						|
                  - key: ptp-notification
 | 
						|
                    operator: In
 | 
						|
                    values:
 | 
						|
                    - "true"
 | 
						|
           containers:
 | 
						|
             - name: ptp-notification-demo-sidecar
 | 
						|
               image: "starlingx/notificationclient-base:|v_starlingx-notificationclient-base|"
 | 
						|
               imagePullPolicy: IfNotPresent
 | 
						|
               tty: true
 | 
						|
               stdin: true
 | 
						|
               livenessProbe:
 | 
						|
               exec:
 | 
						|
                 command:
 | 
						|
                 - curl
 | 
						|
                 - http://127.0.0.1:8080/health
 | 
						|
               failureThreshold: 3
 | 
						|
               initialDelaySeconds: 30
 | 
						|
               periodSeconds: 5
 | 
						|
               successThreshold: 1
 | 
						|
               timeoutSeconds: 5
 | 
						|
            env:
 | 
						|
              - name: THIS_NODE_NAME
 | 
						|
                valueFrom:
 | 
						|
                  fieldRef:
 | 
						|
                    fieldPath: spec.nodeName
 | 
						|
              - name: THIS_POD_IP
 | 
						|
                valueFrom:
 | 
						|
                  fieldRef:
 | 
						|
                    fieldPath: status.podIP
 | 
						|
              - name: REGISTRATION_HOST
 | 
						|
                value: "registration.notification.svc.cluster.local"
 | 
						|
              - name: REGISTRATION_USER
 | 
						|
                value: "admin"
 | 
						|
              - name: REGISTRATION_PASS
 | 
						|
                value: "admin"
 | 
						|
              - name: REGISTRATION_PORT
 | 
						|
                value: "5672"
 | 
						|
              - name: NOTIFICATIONSERVICE_USER
 | 
						|
                value: "admin"
 | 
						|
              - name: NOTIFICATIONSERVICE_PASS
 | 
						|
                value: "admin"
 | 
						|
              - name: NOTIFICATIONSERVICE_PORT
 | 
						|
                value: "5672"
 | 
						|
              - name: SIDECAR_API_PORT
 | 
						|
                value: "8080"
 | 
						|
              - name: DATASTORE_PATH
 | 
						|
                value: "/opt/datastore"
 | 
						|
              - name: LOGGING_LEVEL
 | 
						|
                value: "INFO"
 | 
						|
            command: ["/bin/bash", "/mnt/sidecar_start.sh"]
 | 
						|
            volumeMounts:
 | 
						|
              - name: scripts
 | 
						|
                mountPath: /mnt
 | 
						|
              - name: data-volume
 | 
						|
                mountPath: /opt/datastore
 | 
						|
            resources:
 | 
						|
              requests:
 | 
						|
                cpu: 50m
 | 
						|
                memory: 128Mi
 | 
						|
              limits:
 | 
						|
                cpu: 300m
 | 
						|
                memory: 256Mi
 | 
						|
        imagePullSecrets:
 | 
						|
          - name: admin-registry-secret
 | 
						|
 | 
						|
-----------------
 | 
						|
Example API Calls
 | 
						|
-----------------
 | 
						|
 | 
						|
Below are examples of using curl to interact with the ``ptp-notification`` API.
 | 
						|
These can be used to validate the functionality of the application deployment.
 | 
						|
 | 
						|
.. note::
 | 
						|
 | 
						|
   Some versions of curl have been seen to automatically normalize URLs
 | 
						|
   which results in malformed requests to the server by removing parts of the
 | 
						|
   URL containing '/././' or '/./'
 | 
						|
 | 
						|
If the version of curl being used supports the flag '--path-as-is' then it
 | 
						|
should be included in the command to avoid this behaviour.
 | 
						|
 | 
						|
**v1 Examples**
 | 
						|
 | 
						|
.. code-block:: none
 | 
						|
 | 
						|
    # pull
 | 
						|
 | 
						|
    curl --path-as-is -v -H 'Content-Type: application/json'
 | 
						|
    http://127.0.0.1:8080/ocloudNotifications/v1/PTP/CurrentState |
 | 
						|
    python -m json.tool
 | 
						|
 | 
						|
    # subscribe
 | 
						|
 | 
						|
    curl --path-as-is -v -d '{"ResourceType": "PTP", "ResourceQualifier":
 | 
						|
    {"NodeName":"controller-0"}, "EndpointUri": "http://127.0.0.1:9090/v1/resource_status/ptp"}'
 | 
						|
    -H 'Content-Type: application/json' -X POST http://127.0.0.1:8080/ocloudNotifications/v1/subscriptions
 | 
						|
    |python -m json.tool
 | 
						|
    curl --path-as-is -v -d '{"ResourceType": "PTP", "ResourceQualifier":
 | 
						|
    {"NodeName":"controller-1"}, "EndpointUri": "http://127.0.0.1:9090/v1/resource_status/ptp"}'
 | 
						|
    -H 'Content-Type: application/json' -X POST http://127.0.0.1:8080/ocloudNotifications/v1/subscriptions
 | 
						|
    |python -m json.tool
 | 
						|
 | 
						|
    # get subscriptions
 | 
						|
 | 
						|
    curl --path-as-is -v -H 'Content-Type: application/json'
 | 
						|
    http://127.0.0.1:8080/ocloudNotifications/v1/subscriptions |python -m json.tool
 | 
						|
 | 
						|
    # get one subscription
 | 
						|
 | 
						|
    # must supply the subscription ID found in "get subscriptions"
 | 
						|
 | 
						|
    curl --path-as-is -v -H 'Content-Type: application/json'
 | 
						|
    http://127.0.0.1:8080/ocloudNotifications/v1/subscriptions/<subscription id> |
 | 
						|
    python -m json.tool
 | 
						|
 | 
						|
    # unsubscribe
 | 
						|
    # must supply the subscription ID found in "get subscriptions"
 | 
						|
    curl --path-as-is -X DELETE -v -H 'Content-Type: application/json'
 | 
						|
    http://127.0.0.1:8080/ocloudNotifications/v1/subscriptions/df71709c-9fff-11ec-bf54-6aa223637e5f
 | 
						|
 | 
						|
 | 
						|
**v2 Examples**
 | 
						|
 | 
						|
Some commands can target the status of specific node names or of specific ``ptp4l``
 | 
						|
instances. The names in the format <name> will vary depending on the user's
 | 
						|
environment.
 | 
						|
 | 
						|
The "| python -m json.tool" portion of the command is just for output
 | 
						|
formatting and is not required for operation.
 | 
						|
 | 
						|
Requests with the "/././" path with be automatically directed to the
 | 
						|
``ptp-notification`` server on the local node, while providing "/./<node name>"
 | 
						|
will route to the specified node
 | 
						|
 | 
						|
.. code-block:: none
 | 
						|
 | 
						|
   ## pull
 | 
						|
 | 
						|
   # overall
 | 
						|
 | 
						|
   curl --path-as-is -v -H 'Content-Type: application/json'
 | 
						|
   http://127.0.0.1:8080/ocloudNotifications/v2/././sync/sync-status/sync-state/CurrentState |
 | 
						|
   python -m json.tool
 | 
						|
   curl --path-as-is -v -H 'Content-Type: application/json'
 | 
						|
   http://127.0.0.1:8080/ocloudNotifications/v2/./<node name>/sync/sync-status/sync-state/CurrentState |
 | 
						|
   python -m json.tool
 | 
						|
 | 
						|
   # ptp state
 | 
						|
 | 
						|
   curl --path-as-is -v -H 'Content-Type: application/json'
 | 
						|
   http://127.0.0.1:8080/ocloudNotifications/v2/././sync/ptp-status/lock-state/CurrentState |
 | 
						|
   python -m json.tool
 | 
						|
   curl --path-as-is -v -H 'Content-Type: application/json'
 | 
						|
   http://127.0.0.1:8080/ocloudNotifications/v2/./<node name>/sync/ptp-status/lock-state/CurrentState |
 | 
						|
   python -m json.tool
 | 
						|
   curl --path-as-is -v -H 'Content-Type: application/json'
 | 
						|
   http://127.0.0.1:8080/ocloudNotifications/v2/./<node name>/<ptp instance name>/sync/ptp-status/lock-state/CurrentState |
 | 
						|
   python -m json.tool
 | 
						|
 | 
						|
   # ptp class
 | 
						|
 | 
						|
   curl --path-as-is -v -H 'Content-Type: application/json'
 | 
						|
   http://127.0.0.1:8080/ocloudNotifications/v2/././sync/ptp-status/clock-class/CurrentState |
 | 
						|
   python -m json.tool
 | 
						|
   curl --path-as-is -v -H 'Content-Type: application/json'
 | 
						|
   http://127.0.0.1:8080/ocloudNotifications/v2/./<node name>/sync/ptp-status/clock-class/CurrentState |
 | 
						|
   python -m json.tool
 | 
						|
   curl --path-as-is -v -H 'Content-Type: application/json'
 | 
						|
   http://127.0.0.1:8080/ocloudNotifications/v2/./<node name>/<ptp instance name>/sync/ptp-status/clock-class/CurrentState |
 | 
						|
   python -m json.tool
 | 
						|
 | 
						|
   # phc2sys / os clock state
 | 
						|
 | 
						|
   curl --path-as-is -v -H 'Content-Type: application/json'
 | 
						|
   http://127.0.0.1:8080/ocloudNotifications/v2/././sync/sync-status/os-clock-sync-state/CurrentState |
 | 
						|
   python -m json.tool
 | 
						|
   curl --path-as-is -v -H 'Content-Type: application/json'
 | 
						|
   http://127.0.0.1:8080/ocloudNotifications/v2/./<node name>/sync/sync-status/os-clock-sync-state/CurrentState |
 | 
						|
   python -m json.tool
 | 
						|
 | 
						|
   # gnss
 | 
						|
 | 
						|
   curl --path-as-is -v -H 'Content-Type: application/json'
 | 
						|
   http://127.0.0.1:8080/ocloudNotifications/v2/././sync/gnss-status/gnss-sync-status/CurrentState |
 | 
						|
   python -m json.tool
 | 
						|
   curl --path-as-is -v -H 'Content-Type: application/json'
 | 
						|
   http://127.0.0.1:8080/ocloudNotifications/v2/./<node name>/sync/gnss-status/gnss-sync-status/CurrentState |
 | 
						|
   python -m json.tool
 | 
						|
 | 
						|
   ## subscribe
 | 
						|
 | 
						|
   # subscribe overall
 | 
						|
 | 
						|
   curl --path-as-is -v -d '{"ResourceAddress": "/././sync/sync-status/sync-state", "EndpointUri":
 | 
						|
   "http://127.0.0.1:9090/v2/resource_status/ptp"}' -H 'Content-Type: application/json' -X POST
 | 
						|
   http://127.0.0.1:${SIDECAR_API_PORT}/ocloudNotifications/v2/subscriptions |
 | 
						|
   python -m json.tool
 | 
						|
   curl --path-as-is -v -d '{"ResourceAddress": "/./<node name>/sync/sync-status/sync-state",
 | 
						|
   "EndpointUri": "http://127.0.0.1:9090/v2/resource_status/ptp"}' -H 'Content-Type:
 | 
						|
   application/json' -X POST http://127.0.0.1:${SIDECAR_API_PORT}/ocloudNotifications/v2/subscriptions |
 | 
						|
   python -m json.tool
 | 
						|
 | 
						|
   # subscribe PTP lock state
 | 
						|
 | 
						|
   curl --path-as-is -v -d '{"ResourceAddress": "/././sync/ptp-status/lock-state",
 | 
						|
   "EndpointUri": "http://127.0.0.1:9090/v2/resource_status/ptp"}' -H 'Content-Type: application/json'
 | 
						|
   -X POST http://127.0.0.1:${SIDECAR_API_PORT}/ocloudNotifications/v2/subscriptions |
 | 
						|
   python -m json.tool
 | 
						|
   curl --path-as-is -v -d '{"ResourceAddress": "/./<node name>/sync/ptp-status/lock-state",
 | 
						|
   "EndpointUri": "http://127.0.0.1:9090/v2/resource_status/ptp"}' -H 'Content-Type: application/json'
 | 
						|
   -X POST http://127.0.0.1:${SIDECAR_API_PORT}/ocloudNotifications/v2/subscriptions |
 | 
						|
   python -m json.tool
 | 
						|
 | 
						|
   # subscribe PTP clock class
 | 
						|
 | 
						|
   curl --path-as-is -v -d '{"ResourceAddress": "/././sync/ptp-status/clock-class",
 | 
						|
   "EndpointUri": "http://127.0.0.1:9090/v2/resource_status/ptp"}'
 | 
						|
   -H 'Content-Type: application/json' -X POST
 | 
						|
   http://127.0.0.1:${SIDECAR_API_PORT}/ocloudNotifications/v2/subscriptions |
 | 
						|
   python -m json.tool
 | 
						|
   curl --path-as-is -v -d '{"ResourceAddress": "/./<node name>/sync/ptp-status/clock-class",
 | 
						|
   "EndpointUri": "http://127.0.0.1:9090/v2/resource_status/ptp"}' -H 'Content-Type: application/json'
 | 
						|
   -X POST http://127.0.0.1:${SIDECAR_API_PORT}/ocloudNotifications/v2/subscriptions |
 | 
						|
   python -m json.tool
 | 
						|
 | 
						|
   # subscribe Os clock
 | 
						|
 | 
						|
   curl --path-as-is -v -d '{"ResourceAddress": "/././sync/sync-status/os-clock-sync-state",
 | 
						|
   "EndpointUri": "http://127.0.0.1:9090/v2/resource_status/ptp"}' -H 'Content-Type:
 | 
						|
   application/json' -X POST http://127.0.0.1:${SIDECAR_API_PORT}/ocloudNotifications/v2/subscriptions |
 | 
						|
   python -m json.tool
 | 
						|
   curl --path-as-is -v -d '{"ResourceAddress": "/./<node name>/sync/sync-status/os-clock-sync-state",
 | 
						|
   "EndpointUri": "http://127.0.0.1:9090/v2/resource_status/ptp"}' -H 'Content-Type: application/json'
 | 
						|
   -X POST http://127.0.0.1:${SIDECAR_API_PORT}/ocloudNotifications/v2/subscriptions |
 | 
						|
   python -m json.tool
 | 
						|
 | 
						|
   # subscribe gnss
 | 
						|
 | 
						|
   curl --path-as-is -v -d '{"ResourceAddress": "/././sync/gnss-status/gnss-sync-status",
 | 
						|
   "EndpointUri": "http://127.0.0.1:9090/v2/resource_status/ptp"}' -H 'Content-Type: application/json'
 | 
						|
   -X POST http://127.0.0.1:${SIDECAR_API_PORT}/ocloudNotifications/v2/subscriptions |
 | 
						|
   python -m json.tool
 | 
						|
   curl --path-as-is -v -d '{"ResourceAddress": "/./<node name>/sync/gnss-status/gnss-sync-status",
 | 
						|
   "EndpointUri": "http://127.0.0.1:9090/v2/resource_status/ptp"}' -H 'Content-Type:
 | 
						|
   application/json' -X POST
 | 
						|
   http://127.0.0.1:${SIDECAR_API_PORT}/ocloudNotifications/v2/subscriptions |
 | 
						|
   python -m json.tool
 | 
						|
 | 
						|
   ## List subscriptions
 | 
						|
 | 
						|
   curl --path-as-is -v -H 'Content-Type: application/json'
 | 
						|
   http://127.0.0.1:${SIDECAR_API_PORT}/ocloudNotifications/v2/subscriptions |
 | 
						|
   python -m json.tool
 | 
						|
 | 
						|
   # unsubscribe
 | 
						|
 | 
						|
   curl --path-as-is -X DELETE -v -H 'Content-Type: application/json'
 | 
						|
   http://127.0.0.1:${SIDECAR_API_PORT}/ocloudNotifications/v2/subscriptions/b3862aa2-3499-11ed-a5b5-522422c3cf7d
 | 
						|
 | 
						|
.. image:: figures/cak1614112389132.png
 | 
						|
    :width: 800
 | 
						|
 |