You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 46 Next »


The idea of using control loops to automatically (or autonomously) perform network management has been the subject of much research in the Network Management research community. However,

The diagram below outlines the architecture of the TOSCA defined control loop management.

A TOSCA file contains the descriptor of the control loop. The entire control loop definition, including references to required artifacts, are included in the TOSCA file. The TOSCA file may be packaged in a CSAR, which also includes further artifacts that are required to deploy and instantiate a control loop.

1: Overall Architecture

Liam Fallon to pad out

2: Control Loop Modelling

Joseph O'Leary to pad out this section

A Control Loop service template is made up of several components, those which represent applications, those which represent dynamic config schemas, and the actual node_templates which makes up the loop itself.

Applications can be a DCAE microservice, an operational policy, or any other application as long as it can be modelled, and the targeted ecosystem to has a participant client waiting for the event distributions from CLAMP via DMaaP MR.

Dynamic config on the other hand can be a monitoring policy, or any other resource that provides config to parts of the loop, can be updated after the run time phase has started and is supported by the components hosting the applications in the control loop.

2.1: Control Loop TOSCA file definition

2.1.1 Application Definition 

Application Node Definition
node_types:
  org.onap.APP:
    properties:
      application_name:
        type: string
        description: Human readable name for the application.
        required: true
      provider:
        type: string
        description: Provider of the application and of the descriptor.
        required: true
      application_version:
        type: string
        description: Software version of the application.
        required: true
      resource_id:
        type: string
        description: >The ID of the resource, 
          should be provided if the resource was uploaded to the entity's inventory already.
        required: false
      resource_content:
        type: string
        description: the contents of the application resource, to be uploaded during deploy phase of loop.
        required: false
      monitoring_policy:
        type: string
        description: A reference to the monitoring policy if applicable.
        required: false
    version: 0.0.1
    derived_from: tosca.nodes.Root

2.1.2 Loop Definition

The loop definition is implicit in the node_templates within the topology_template, any node contained within is expected to be a part of the control loop managed by CLAMP.

Loop Definition
topology_template:
  inputs:
    pm_docker_image:
      type: string
      description: docker image used for deploying the PMSH service.
      required: true
    operational_policy_name:
      type: string
      description: name of the operational policy to be triggered on MR when subscription is created.
      required: true
    outbound_topic_name:
      type: string
      description: Name of topic used for messages to policy.
      required: true
    feedback_topic_name:
      type: string
      description: Name of topic used for feedback from policy.
      required: true
    inventory_notification_topic_name:
      type: string
      description: Name of topic used for inventory inventory notifications.
      required: true
    pmsh_resource_id:
      type: string
      description: ID of the PMSH blueprint in the inventory.
      required: true

  node_templates:
    org.onap.PM_Subscription_Handler:
      type: org.onap.APP
      properties:
        application_name: PMSH
        provider: DCAE
        application_Version: '1.0.1'
        resource_id: { get_input: pmsh_resource_id }
        monitoring_policy: 'monitoring_policy_id'


2.1: Modelling from TOSCA to Deployment Data in Run Time Catalogue

2.2: Modelling from TOSCA to Instance Data Run Time Catalogue

3: APIs and Sequence Diagrams

3.1: Deployment

Ajay Deep Singh to pad out this section

3.1.1: Deployment REST API 

Initial Swagger Draft for Deployment API
openapi: 3.0.3
info:
  description: >-
    The ControlLoop Deployment API allows users to search and perform
    CRUD action on Controlloop Tosca exported data sets.
  version: 1.0.0
  title: Control Loop Deployment API
  license:
    name: Apache 2.0
    url: 'http://www.apache.org/licenses/LICENSE-2.0'
  contact:
    email: lego@est.tech
servers:
  - url: '{scheme}://onap/controlloop/v2/'
    variables:
      scheme:
        description: 'The Data Set API is accessible via https and http'
        enum:
          - 'https'
          - 'http'
        default: 'http'
tags:
  - name: Control Loop 
    description: Deployment API
  - name: design-catalogue
    description: CRUD actions on an designtime Control Loop data sets.
  - name: runtime-catalogue
    description: CRUD actions on an runtime Control Loop data sets.
paths:
  /design-catalogue/loops:
    get:
      tags:
        - design-catalogue
      operationId: getAllLoopsUsingGET
      summary: Returns a list of all available Control Loops.
      responses:
        '200':
          description: OK
          content:
            application/yaml:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ControlLoop'
                  
  /design-catalogue/loop/{controlLoopId}:
    get:
      tags:
        - design-catalogue
      summary: >-
        Returns a specific control loop.
      description: >-
        This GET API returns a specific control loop.
      operationId: getLoopByIdUsingGET
      parameters:
        - name: controlLoopId
          in: path
          description: 'Id of the control loop.'
          required: true
          example: "org.onap.PM_CDS_Blueprint"
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/yaml:
              schema:
                $ref: '#/components/schemas/ControlLoop'
  
    delete:
      tags:
        - design-catalogue
      summary: Delete a specific Control Loop by ID.
      operationId: deleteLoopByIdUsingDELETE
      parameters:
        - name: controlLoopId
          in: path
          description: Identity for the control loop
          required: true
          style: simple
          schema:
            type: string
      responses:
        '200':
          description: OK
        '404':
          description: Control Loop not present

    post:
      tags:
        - design-catalogue
      summary: >-
        Accepts a Tosca Service Template representing a Control Loop.
      description: >-
        This API Create a Control Loop.
      operationId: createLoopWithIDUsingPOST
      parameters:
        - name: controlLoopId
          in: path
          description: Identity for the control loop
          required: true
          style: simple
          schema:
            type: string
      responses:
        '200':
          description: OK
        '409':
          description: Control Loop already exist.
     
    put:
      tags:
        - design-catalogue
      summary: Updates a Control Loop.
      operationId: updateLoopWithIDUsingPUT
      parameters:
        - name: controlLoopId
          in: path
          description: Identity for the control loop
          required: true
          style: simple
          schema:
            type: string
      responses:
        '200':
          description: OK
        '404':
          description: Control Loop not found
          
  /runtime-catalogue/deploy:
    post:
      tags:
        - runtime-catalogue
      summary: >-
        Deploys Tosca Service Template in RunTime Catalogue.
      description: >-
        This API Deploys Tosca Service Template in RunTime Catalogue DB.
      operationId: deployLoopWithPOST
      responses:
        '200':
          description: OK
        '404':
          description: No matching record found for the given criteria.
          
  /runtime-catalogue/loop/{controlLoopId}:
    get:
      tags:
        - runtime-catalogue
      summary: >-
        Returns a specific control loop.
      description: >-
        This GET API returns a specific control loop.
      operationId: getLoopByIdUsing
      parameters:
        - name: controlLoopId
          in: path
          description: 'Id of the control loop.'
          required: true
          example: "org.onap.PM_CDS_Blueprint"
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/yaml:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ControlLoop'
  
    delete:
      tags:
        - runtime-catalogue
      summary: Delete a specific Control Loop by ID.
      operationId: deleteLoopByIdUsing
      parameters:
        - name: controlLoopId
          in: path
          description: Identity for the control loop
          required: true
          style: simple
          schema:
            type: string
      responses:
        '200':
          description: OK
        '404':
          description: Control Loop not present

    post:
      tags:
        - runtime-catalogue
      summary: >-
        Accepts a Tosca Service Template representing a Control Loop.
      description: >-
        This API Create a Control Loop.
      operationId: createLoopWithIDUsing
      parameters:
        - name: controlLoopId
          in: path
          description: Identity for the control loop
          required: true
          style: simple
          schema:
            type: string
      responses:
        '200':
          description: OK
        '409':
          description: Control Loop already exist.
     
    put:
      tags:
        - runtime-catalogue
      summary: Updates a Control Loop.
      operationId: updateLoopWithIDUsing
      parameters:
        - name: controlLoopId
          in: path
          description: Identity for the control loop
          required: true
          style: simple
          schema:
            type: string
      responses:
        '200':
          description: OK
        '404':
          description: Control Loop not found

components:
  schemas:
    ControlLoop:
      title: ControlLoop
      type: object
      properties:
        id:
          type: string
        ControlLoop:
          type: string

3.1.2: Deployment Sequence Diagrams

  1. GET, DELETE, CREATE API ControlLoop Sequence Diagram

    GET, DELETE, CREATE API Sequence Diag CLAMP CLAMP CL_Instance_Control CL_Instance_Control Database Database It can be DesiginTime Or RuntTime Catalogue Database Rest API Request (JSON/Yaml) Get, Delete Or Create ControlLoops Pull, Delete existing Or Create New ControlLoops in Database alt[successful case] Return List of ControlLoops Or able to Delete, Create ControlLoop in Database Return Success [failure case] Return either Empty List for Get ControlLoops Or Failure Status for Delete, Create Request No ControlLoops exist Or Failed in Deleting, Creating ControlLoops Return Failure
  2. Deploy API ControlLoop Sequence Diagram 

    Deploy API ControlLoop Sequence Diag CLAMP CLAMP CL_Instance_Control CL_Instance_Control DesignTime_Catalogue_Database DesignTime_Catalogue_Database RunTime_Catalogue_Database RunTime_Catalogue_Database Rest Deploy API Request (JSON/Yaml) Fetch ControlLoop from DesignTime Catalogue Database Fetch existing ControlLoops from DesignTime Catalogue Database alt[successful case] Return List of existing ControlLoops from DesignTime Catalogue Database Populate RunTime Catalogue with ControlLoops existing in DesignTime Catalogue Database Push ControlLoop from DesignTime to RunTime Catalogue Database Return Success [failure case] Return Empty ControlLoop List, No ControlLoop exist in DesignTime Catalogue DesignTime Catalogue Database is Empty, cannot deploy ControLoop in RunTime Catalogue Database Return Failure

3.2: Instantiation

Robertas Rimkus to pad out this section

3.2.1: Instantiation REST API

Initial Swagger for Initiation API
openapi: 3.0.3
info:
  title: Swagger Control Loop Instantiation
  description: ""
  version: 1.0.0
servers:
  - url: '{scheme}://onap/controlloop/v2/'
    variables:
      scheme:
        description: 'The Data Set API is accessible via https and http'
        enum:
          - 'https'
          - 'http'
        default: 'http'
tags:
- name: instantiate
  description: Control Loop Instantiation
paths:
  /runtime-catalogue/instantiate:
    post:
      tags:
      - instantiate
      summary: Instantiate a deployed control loop
      operationId: instantiateLoop
      requestBody:
        description: Control loop that is to be instantiated
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ControlLoop'
        required: true
      responses:
        200:
          description: OK
          content:            
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ApiResponse'
        404:
          description: No Control Loop found
        405:
          description: Invalid input
  /runtime-catalogue/loops/instantiated:
    get:
      tags:
      - instantiate
      summary: Get a list of instantiated control loops
      responses:
        200:
          description: Success
          content:            
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ControlLoop'
        404:
          description: No instantiated control loops found
  /runtime-catalogue/loops/instantiated/{loop-id}:
    get:
      tags:
      - instantiate
      summary: Get an instantiated control loop by id
      parameters:
      - name: loop-id
        in: path
        description: ID of instantiated loop to return
        required: true
        schema:
          type: string
      responses:
        200:
          description: OK
          content:            
            application/json:
              schema:
                $ref: '#/components/schemas/ControlLoop'
        404:
          description: Control Loop not found
    put:
      tags:
      - instantiate
      summary: Update an instantiated control loop
      parameters:
      - name: loop-id
        in: path
        description: ID of instantiated loop
        required: true
        schema:
          type: string
      requestBody:
        description: Control loop to be updated
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ControlLoop'
        required: true
        
      responses:
        200:
          description: OK
          content:            
            application/json:
              schema:
                $ref: '#/components/schemas/ControlLoop'
        404:
          description: Control Loop not found
    delete:
      tags:
      - instantiate
      summary: Delete an instantiated control loop
      parameters:
      - name: loop-id
        in: path
        description: ID of instantiated loop
        required: true
        schema:
          type: string
      responses:
        200:
          description: OK
        404:
          description: Control Loop not found
components:
  schemas:
    ControlLoop:
      title: ControlLoop
      type: object
      properties:
        id:
          type: string
        controlLoopTosca:
          type: string
    ApiResponse:
      type: object
      properties:
        code:
          type: integer
          format: int32
        status:
          type: string

3.2.2: Instantiation Sequence Diagrams

Instantiation CLAMP CLAMP CL_Instance_Control CL_Instance_Control Runtime_DB Runtime_DB DmaaP DmaaP Participants Participants Instantiate CL Fetch the Deployed Control Loop from Models table Return the requested Deployed Control Loop data INSTANTIATE Event (JSON/Yaml) List of Participant ID's containing Participant Metadata Blocks Pulls its part of CL and tries to Instantiate alt[successful case] INSTANTIATE ACK (JSON/Yaml) One per Participant Update the CL Instance LCM Data table Instantiation Successful [failure case]timeout INSTANTIATE ACK not received TEARDOWN Event (JSON/Yaml) Pulls its part of CL and starts Teardown TEARDOWN ACK (JSON/Yaml) One per Participant Instantiation Failed

3.2.3: Instantiation DMaaP API

Initial Thought for an event to be sent from CL_Instance_Control onto DmaaP for Participants to consume. The event would go onto an output topic which the Participants would be polling/subscribed to

e.g url : https://{{ONAPIP}}:{{DmaaPPort}}/events/CL_INSTANCE_CONTROL_OUTPUT

CL_Instance_Control Event to DmaaP
{
  "instance-id":"myCLInstance1",
  "action":"INSTANTIATE",
  "configurations":[
    {
      "participant-id":"Participant_DCAE",
      "applications":[
        {
          "application-id":"example.pmsh",
          "config":{
            
          }
        },
        {
          "application-id":"example.dfc",
          "config":{
            
          }
        }
      ]
    },
    {
      "participant-id":"Participant_Policy",
      "applications":[
        {
          "application-id":"example.OperationalPolicy",
          "config":{
            
          }
        }
      ]
    }
  ]
}


3.2.4: Instantiation Participant API

3.3: Monitoring

3.3.1: Monitoring REST API

3.3.2: Monitoring Sequence Diagrams

3.3.3: Monitoring DMaaP API

3.3.4: Monitoring Participant API

4: Design

4.1: Server Side

4.1.1 Database Schema and JPA

4.1.2: TOSCA Processing

4.1.3: Instance Control

4.1.4: Execution Monitoring

4.2: Participant Side

4.2.1: Participant Agent

4.2.2: Policy Participant Agent

4.2.3: CDS Participant Agent

4.2.4: DCAE Participant Agent

4.2.5: SO Participant Agent

4.3: Client Side

4.3.1: Client SDK: Composition of Control Loop Tosca

4.3.2: Client User Interface


5: MVP

5.1: Goals

5.2: Limitations








  • No labels