Day 0: On-Boarding DCAE Micro Services
@startuml
title This is the flow for onboarding DCAE components. All components get onboarded and made available to DCAE template designer.
box "DCAE Development"
actor Component_Developer
entity DCAE_Comp_JSON
participant DCAE_CLI
end box
box "SDC GUI" #f4c69f
participant TOSCA_Tool as DCAE_TOSCA_Tool
entity "MODELS/BLUEPRINTS" as MODELS
participant SDC
database SDC_Catalog
end box
autonumber
loop for all DCAE Components
Component_Developer -> DCAE_Comp_JSON : Creates JSON schema\nspecifying the metadata\nrequired by this component.\nInputs\nOutputs\nConfiguration
Component_Developer <-> DCAE_CLI : Verifies the spec and deployment (if CBS/Consul are setup)
DCAE_Comp_JSON -> DCAE_TOSCA_Tool : Use TOSCA tool to\ncreate artifact.
DCAE_TOSCA_Tool -> MODELS : TOSCA Artifact created.
MODELS -> SDC : Imports into SDC\nto onboard their\nDCAE component
SDC -> SDC_Catalog : Saved into catalog
end
@enduml
TODO: change UML for terminology
DCAE Component-spec
The DCAE component specification is a JSON file that is used to describe and configure a DCAE Micro Service component.
For a complete description, examples and details of on-boarding of DCAE Micro Services, please refer to MicroServices Onboarding.
Day 0: DCAE Design Studio Creation of Service Assurance Flows
For Beijing, the creation of Service Assurance flows are being done out-of-band using the command line tool TOSCA Lab. The service assurance flows will be pre-loaded into the SDC Catalog for Beijing. SDC is currently integrating the DCAE Design Studio as part of Beijing development.
Day 0: Importing DCAE Micro Service Policy Model
For Beijing, the DCAE Micro Service Policy Models will be pre-loaded. For development purposes, the following screen shots can be used to demonstrate how to load a model.
flow diagram/screen shots
tosca_definitions_version: tosca_simple_yaml_1_0_0
data_types:
policy.data.thresholds:
properties:
closedLoopControlName:
type: string
description: A UNIQUE string identifying the Closed Loop ID this event is for.
direction:
type: string
constraints:
- valid_values:
- LESS
- LESS_OR_EQUAL
- GREATER
- GREATER_OR_EQUAL
fieldPath:
type: string
severity:
type: string
description: event severity or priority
constraints:
- valid_values:
- CRITICAL
- MAJOR
- MINOR
- WARNING
- NORMAL
thresholdValue:
type: integer
version:
type: string
description: Version for the closed loop message
node_types:
policy.nodes.Root:
derived_from: tosca.nodes.Root
properties:
policyDescription:
required: false
type: string
policyName:
required: true
type: string
policyScope:
required: true
type: string
policyVersion:
required: true
type: string
policy.nodes.cdap.tca.hi.lo.app:
derived_from: policy.nodes.Root
properties:
domain:
type: string
constraints:
- equal: measurementsForVfScaling
functionalRole:
type: string
description: Function of the event source e.g., eNodeB, MME, PCRF
thresholds:
type: list
entry_schema:
type: policy.data.thresholds
Day 1: SDC/CLAMP Create a Control Loop in a Service
@startuml
title This is the flow during Service Design for designing Control Loop Blueprints via CLAMP.
actor Service_Designer
participant SDC
database SDC_Catalog
entity Service_1 #ffb266
entity VNF_Artifact #b266ff
participant CLAMP
participant Policy
database Policy_Repo
autonumber
Service_Designer -> SDC : Log into SDC
SDC -> SDC : Create service
loop for all VNFs
note right
For simplicity, assume the designer
will create a control loop per VNF.
end note
SDC_Catalog -> VNF_Artifact : Find artifact
VNF_Artifact -> Service_1 : Add VNF to service.
SDC -> CLAMP : Go to CLAMP\nto create a Control Loop
CLAMP -> SDC_Catalog : Find DCAE Template
create collections DCAE_Template_1 #red
CLAMP -> DCAE_Template_1 : Select DCAE Template\nand create a working model\nof the Control Loop.
create collections Model_1 #00FFFF
DCAE_Template_1 -> Model_1 : Now designing a model\nbased on the template.
loop for all DCAE Components in Template (now Model)
Model_1 -> Model_1 : Configure the\nDCAE Component as desired.
Model_1 -> Policy : Create DCAE Component\nConfig Policy based on default TOSCA
create entity Config_Policy #green
Policy -> Config_Policy : Creates XACML
Config_Policy -> Policy_Repo : Stores runtime\config policy.
Policy -> Model_1 : Returns Policy ID
end loop
Model_1 -> Policy : Create Operational Policy
create entity Op_Policy #green
Policy -> Op_Policy : Using a Drools\ncontrol loop template,\na policy is created for\nthis specific control loop.
Op_Policy -> Policy_Repo : Stores runtime operational policy.
Policy -> Model_1 : Returns Policy ID
Model_1 -> SDC_Catalog : Generate "BLUEPRINT" and save to catalog
end loop
SDC -> SDC_Catalog : Save service to database
@enduml
TODO: Update UML with correct terminology. Update UML to add SDC Service Distribution
example of policies, blueprints, api calls. etc.
Day N: Control Loop Deployment
Control Loop deployment happens when an instance of a Service is created.
TODO flow diagram
Day N: Runtime Flow of a Control Loop
The following is a control loop message flow, across DCAE, Policy and App-C. The sections afterward will describe the process for designing, configuring and instantiating this flow.
{
"event": {
"commonEventHeader": {
"startEpochMicrosec": 1500584201765465,
"sourceId": "Dummy VM UUID - No Metadata available",
"eventId": "11",
"reportingEntityId": "No UUID available",
"internalHeaderFields": {
"collectorTimeStamp": "Thu, 07 20 2017 08:56:52 GMT"
},
"eventType": "HTTP request rate",
"priority": "Normal",
"version": 1.2,
"reportingEntityName": "fwll",
"sequence": 11,
"domain": "measurementsForVfScaling",
"lastEpochMicrosec": 1500584212017216,
"eventName": "vnfScalingMeasurement",
"sourceName": "Dummy VM name - No Metadata available"
},
"measurementsForVfScalingFields": {
"cpuUsageArray": [{
"percentUsage": 0,
"cpuIdentifier": "cpu1",
"cpuIdle": 100,
"cpuUsageSystem": 0,
"cpuUsageUser": 0
}],
"measurementInterval": 10,
"requestRate": 7832,
"vNicUsageArray": [{
"transmittedOctetsDelta": 5680,
"receivedTotalPacketsDelta": 14,
"vNicIdentifier": "eth0",
"valuesAreSuspect": "true",
"transmittedTotalPacketsDelta": 31,
"receivedOctetsDelta": 1332
}],
"measurementsForVfScalingVersion": 2.1
}
}
}
{
"closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e",
"version": "1.0.2",
"requestID": "a20e2073-30b1-4357-893b-f5ed57b66ef0",
"closedLoopAlarmStart": 1478189220547,
"closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca",
"target_type": "VNF",
"target": "generic-vnf.vnf-name",
"AAI": {
"generic-vnf.vnf-name" : "vCPE_Infrastructure_vGMUX_demo_app"
},
"from": "DCAE",
"policyScope": "DCAE",
"policyName": "DCAE.Config_tca-hi-lo",
"policyVersion": "v0.0.1",
"closedLoopEventStatus": "ONSET"
}
{
"body": {
"input": {
"common-header": {
"timestamp": "2017-08-25T21:06:23.037Z",
"api-ver": "2.00",
"originator-id": "a20e2073-30b1-4357-893b-f5ed57b66ef0",
"request-id": "a20e2073-30b1-4357-893b-f5ed57b66ef0",
"sub-request-id": "1",
"flags": {}
},
"action": "Restart",
"action-identifiers": {
"vnf-id": "vCPE_Infrastructure_vGMUX_demo_app"
}
}
},
"version": "2.0",
"rpc-name": "restart",
"correlation-id": "a20e2073-30b1-4357-893b-f5ed57b66ef0-1",
"type": "request"
}
{
"body": {
"output": {
"common-header": {
"timestamp": "2017-08-25T21:06:23.037Z",
"api-ver": "2.00",
"originator-id": "a20e2073-30b1-4357-893b-f5ed57b66ef0",
"request-id": "a20e2073-30b1-4357-893b-f5ed57b66ef0",
"sub-request-id": "1",
"flags": {}
},
"status": {
"code": 400,
"message": "Restart Successful"
}
}
},
"version": "2.00",
"rpc-name": "restart",
"correlation-id": "a20e2073-30b1-4357-893b-f5ed57b66ef0-1",
"type": "response"
}
{
"closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e",
"version": "1.0.2",
"requestID": "0abc0000-b032-4e4b-bd30-88260f444888",
"closedLoopAlarmStart": 1478189220547,
"closedLoopAlarmEnd": 1478589220547,
"closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca",
"target_type": "VNF",
"target": "generic-vnf.vnf-name",
"AAI": {
"generic-vnf.vnf-name" : "vCPE_Infrastructure_vGMUX_demo_app"
},
"from": "DCAE",
"policyScope": "DCAE",
"policyName": "DCAE.Config_tca-hi-lo",
"policyVersion": "v0.0.1",
"closedLoopEventStatus": "ABATED"
}
Day N: Runtime Monitoring of a Control Loop
flow diagram