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.
eyJleHRTcnZJbnRlZ1R5cGUiOiIiLCJnQ2xpZW50SWQiOiIiLCJjcmVhdG9yTmFtZSI6IkxpYW0gRmFsbG9uIiwib3V0cHV0VHlwZSI6ImJsb2NrIiwibGFzdE1vZGlmaWVyTmFtZSI6IkxpYW0gRmFsbG9uIiwibGFuZ3VhZ2UiOiJlbiIsImRpYWdyYW1EaXNwbGF5TmFtZSI6IiIsInNGaWxlSWQiOiIiLCJhdHRJZCI6IjkyOTk5NTIyIiwiZGlhZ3JhbU5hbWUiOiJPdmVydmlldyIsImFzcGVjdCI6IiIsImxpbmtzIjoiYXV0byIsImNlb05hbWUiOiJUT1NDQSBEZWZpbmVkIENvbnRyb2wgTG9vcDogQXJjaGl0ZWN0dXJlIGFuZCBEZXNpZ24iLCJ0YnN0eWxlIjoidG9wIiwiY2FuQ29tbWVudCI6ZmFsc2UsImRpYWdyYW1VcmwiOiIiLCJjc3ZGaWxlVXJsIjoiIiwiYm9yZGVyIjp0cnVlLCJtYXhTY2FsZSI6IjEiLCJvd25pbmdQYWdlSWQiOjkyOTk5NTIxLCJlZGl0YWJsZSI6ZmFsc2UsImNlb0lkIjo5MzAwMDE4OSwicGFnZUlkIjoiIiwibGJveCI6dHJ1ZSwic2VydmVyQ29uZmlnIjp7ImVtYWlscHJldmlldyI6IjEifSwib2RyaXZlSWQiOiIiLCJyZXZpc2lvbiI6MywibWFjcm9JZCI6IjhhNDBlZTZkLTRhNDctNDIyZS1hYjdjLTllM2MwNDUzOWNkMCIsInByZXZpZXdOYW1lIjoiT3ZlcnZpZXcucG5nIiwibGljZW5zZVN0YXR1cyI6Ik9LIiwic2VydmljZSI6IiIsImlzVGVtcGxhdGUiOiIiLCJ3aWR0aCI6Ijk2MyIsInNpbXBsZVZpZXdlciI6ZmFsc2UsImxhc3RNb2RpZmllZCI6MTYwNzYwMDQ0MjAwMCwiZXhjZWVkUGFnZVdpZHRoIjpmYWxzZSwib0NsaWVudElkIjoiIn0=
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
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.
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
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
3.2: Instantiation
Robertas Rimkus to pad out this section
3.2.1: Instantiation REST 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
3.2.3: Instantiation DMaaP API
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