22 KiB
Support LCM notifications for VNF based on ETSI NFV-SOL specification
https://blueprints.launchpad.net/tacker/+spec/support-etsi-nfv-specs
ETSI specifications within the NFV Architecture Framework1 describe the main aspects of NFV development and usage based on of the industry needs, feedback from SDN/NFV vendors and telecom operators. These specifications include the REST API and data model architecture which is used by NFV users and developers in related products.
Problem description
In the current Tacker implementation based on ETSI NFV-SOL, Tacker uses its own API which describes VNF lifecycle change notifications which is Ability to inform the receiver that LCM operations has been changed.
However, those operations are not aligned with the current ETSI NFV data-model. As a result, there might be lack of compatibility with 3rd party VNFs2, as they are developed according to ETSI NFV specifications. Support of key ETSI NFV specifications will significantly reduce efforts for Tacker integration into Telecom production networks and also will simplify further development and support of future standards.
Proposed change
Introduces new interfaces to VNFM in order to notify VNF lifecycle management operations status for VNF instances. The operation provided through the interfaces are:
- Subscription (GET/POST/DELETE)
- Notification endpoint (POST)
- Individual Subscription (GET)
- individual VNF occurrence (GET)
1)Flow of managing subscriptions
- Register subscription
- seqdiag {
-
Client -> "tacker-server" [label = " POST /subscriptions"]; "tacker-server" -> "tacker-server" [label = " generate subscription_id (uuid)"]; Client <-- "tacker-server" [label = " Resonse 201 Created"];
}
- Delete subscription
- seqdiag {
-
- Client -> "tacker-server"
-
[label = " DELETE /subscriptions/{subscriptionId}"];
Client <-- "tacker-server" [label = " Resonse 204 No Content"];
}
- Show subscription
- seqdiag {
-
Client -> "tacker-server" [label = " GET /subscriptions/{subscriptionId}"]; Client <-- "tacker-server" [label = " Resonse 200 OK"];
}
- List subscription
- seqdiag {
-
Client -> "tacker-server" [label = " GET /subscriptions"]; "tacker-server" -> "tacker-server" [label = "request validation"]; Client <-- "tacker-server" [label = " Resonse 200 OK"];
}
- VNFM holds the Callback URL sent by consumer via "Subscription API" in advance.
- Notify the issuer of the ID associated with the received Subscription request.
- For the registered Subscription status, read by specifying ID, reading of all ID data and deletion of specified ID are allowed.
2)Flow of sending notifications
- Depending on the progress status of the sequence, VNFM send notification (Notify) to notify the status change and update the internal operation_status.
Precondition: Requesting Node has subscribed previously to notifications related to VNF lifecycle management.
- When the LCM request is accepted, the operation status is sent to the consumer which registers subscription via "Subscription API". This will be sent for the number of registrations.
- The following operation states can be notified: STARTING/PROCESSING/COMPLETED/ROLLINGBACK/ROLLEDBACK/FAILED_TEMP
- STARTING state is sent from Tacker Server, and other Operation_state notifications are sent from Tacker-Conductor.
- Modify VNF does not send STARTING state.
- NFVO which recieved notification infomation sends 204 No Content to Tacker.
3) Flow of LCM Operation with notification
- Instantiate VNF
- Scale VNF
- Heal VNF
- Terminate VNF
- seqdiag {
-
Client -> "tacker-server" [label = "LCM Operation Request"]; Client <-- "tacker-server" [label = "Response 202 Accepted"]; "tacker-server" ->> "tacker-conductor" [label = "execute notification process"]; Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; Client --> "tacker-conductor" [label = "Response: 204 No Content"]; "tacker-server" -> "tacker-conductor" [label = "trriger asynchronous task"]; NFVO <- "tacker-conductor" [label = "POST /grants"]; NFVO --> "tacker-conductor" [label = "201 Created"]; "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; Client --> "tacker-conductor" [label = "Response: 204 No Content"]; "tacker-conductor" -> "VnfLcmDriver" [label = "execute MgmtDriver"]; "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; Client --> "tacker-conductor" [label = "Response: 204 No Content"];
}
- Modify VNF
- seqdiag {
-
Client -> "tacker-server" [label = "LCM Operation Request"]; Client <-- "tacker-server" [label = "Response 202 Accepted"]; "tacker-server" -> "tacker-conductor" [label = "trriger asynchronous task"]; "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; Client --> "tacker-conductor" [label = "Response: 204 No Content"]; "tacker-conductor" -> "VnfLcmDriver" [label = "execute MgmtDriver"]; "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; Client --> "tacker-conductor" [label = "Response: 204 No Content"];
}
- Rollback
- seqdiag {
-
node_width = 100; edge_length = 160;
- Client -> "tacker-server"
-
[label = "POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"];
Client <-- "tacker-server" [label = "Response 202 Accepted"]; "tacker-server" -> "tacker-conductor" [label = "trriger asynchronous task"]; "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; Client <- "tacker-conductor" [label = "POST {callback URI} (ROLLING_BACK)"]; Client --> "tacker-conductor" [label = "Response: 204 No Content"]; "tacker-conductor" -> "MgmtDriver" [label = "execute MgmtDriver"]; "tacker-conductor" <-- "MgmtDriver" [label = ""]; "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; Client <- "tacker-conductor" [label = "POST {callback URI} (ROLLED_BACK)"]; Client --> "tacker-conductor" [label = "Response: 204 No Content"];
}
4) Flow of VNF instance resource with notification
- CereateVNFRequest
- seqdiag {
-
Client -> "tacker-server" [label = "POST /vnf_instances/"]; "tacker-server" ->> "tacker-server" [label = "Create VNF instance resource"]; "tacker-server" -> "tacker-conductor" [label = "execute vnf_package list process{filter}"]; NFVO <- "tacker-conductor" [label = "GET /vnf_packages/ with attribute filter(vnfdId)"]; NFVO --> "tacker-conductor" [label = "Response 200 OK with VnfPkgInfo"]; "tacker-server" <<- "tacker-conductor" [label = "(VnfPkgInfo)"]; "tacker-server" ->> "tacker-server" [label = "Update VNF instance resource(VnfPkgInfo)"]; "tacker-server" -> "tacker-conductor" [label = "execute vnf_package content process{vnfPkgId}"]; NFVO <- "tacker-conductor" [label = "GET /vnf_packages/{vnfPkgId}/package_content "]; NFVO --> "tacker-conductor" [label = "Response 200 OK with VNF package file"]; "tacker-server" <<- "tacker-conductor" [label = "(VNF package content file)"]; "tacker-server" ->> "tacker-server" [label = "Store received package file"]; Client <-- "tacker-server" [label = " Resonse 201 Created"]; "tacker-server" ->> "tacker-conductor" [label = "execute notification process"]; Client <- "tacker-conductor" [label = "POST {callback URI}"]; Client --> "tacker-conductor" [label = "Responce 204 No Content"];
}
- DeleteVNFRequest
- seqdiag {
-
Client -> "tacker-server" [label = "DELETE /vnf_instances/{vnfInstanceId} "]; "tacker-server" ->> "tacker-server" [label = "Delete VNF instance resource"]; Client <-- "tacker-server" [label = " Resonse 204 No Content"]; "tacker-server" ->> "tacker-conductor" [label = "execute notification process"]; Client <- "tacker-conductor" [label = "POST {callback URI}"]; Client --> "tacker-conductor" [label = "Responce 204 No Content"];
}
5)Flow of Getting Operation Status
Operation status can be obtained from VNFM.
- seqdiag {
-
Client -> "tacker-server" [label = " GET /vnf_lcm_op_occs/{vnfLcmOpOccId}"]; Client <-- "tacker-server" [label = " Resonse 200 OK"];
}
- The transmission source node specifies the vnfLcmOpOccId issued at the time of subscription and reads the information about the resource in the Subscription state.
- If the VNFM information read is successful, Response 200 OK is responded.
Alternatives
None
Data model impact
Add below new tables in ‘tacker’ database. The corresponding schemas are detailed below:-
- A list of added tables:
-
- vnf_lcm_filters
details of added table:
vnf_lcm_filters:
id id varchar(36) Not Null 36) Not Null subscription_uuid subscription_uuid varchar(filter filter json Not Null notification_types notification_types MEDIUMBLOBint notification_types_len notification_types_len operation_types operation_types MEDIUMBLOBint operation_types_len operation_types_len
subscription_uuid will be foreign key of vnf_lcm_subscriptions.id. This table has current status of LCM. Table for accumulating information for each event.
vnf_lcm_op_occs:
id id varchar(36) Not Null 16) Not Null operation_state operation_state varchar( state_entered_time state_entered_time datetime Not Null start_time start_time datetime Not Null36) Not Null vnf_instance_id vnf_instance_id varchar(16) Not Null operation operation varchar(1) Not Null is_cancel_pending is_cancel_pending tinyint(1) Not Null is_automatic_invocation is_automatic_invocation tinyint( operation_params operation_params json error error json resource_changes resource_changes jsonint error_point error_point changed_info changed_info json created_at created_at datetime Not Null updated_at updated_at datetime deleted_at deleted_at datetime1) Not Null deleted deleted tinyint(
vnf_instance_id will be foreign key of vnf_instances.id. This table has current status of operation occurrence
vnf_lcm_subscriptions:
id id varchar(36) Not Null 255) Not Null callback_uri callback_uri varchar( subscription_authentication subscription_authentication json1) deleted deleted tinyint(
This table has registration information of Subscription
REST API impact
The following restFul API will be added. This restFul API will be based on ETSI NFV SOL0023 and SOL0034.
- Name: Subscriptions
Description: Subscribe to notifications related to VNF lifecycle management
Method type: POST
URL for the resource: /vnflcm/v1/subscriptions
Request:Data type Cardinality Description +==========================+======+======+==================================+ | LccnSubscriptionRequest | 1 | Parameters for the Subscription. | +--------------------------+-------------+----------------------------------+
Attribute name Data type Cardinality Supported in (V) filter LifecycleChangeNotificationFilter 0..1 Yes callbackUri Uri 1 Yes authentication SubscriptionAuthentication 0..1 Yes Response:Data type Cardinality Response Codes Description LccnSubscription n/a Success 201
Redirection 303
Error 4xxThe subscription has been created successfully. - Name: List Subscriptions
Description: Request to list all existing subscriptions
Method type: GET
URL for the resource: /vnflcm/v1/subscriptions
Request:Data type Cardinality Description Supported in (V) filter 0..1 Filter to list subscriptions No Response:Data type Cardinality Response Codes Description LccnSubscription n/a Success 200
Error 400 4xxThe list of subscriptions has been queried successfully. - Name: Query Subscriptions
Description: Request to show individual subscription resource by its id
Method type: GET
URL for the resource: /vnflcm/v1/subscriptions/{subscriptionId}
Request:Name Description subscriptionId Identifier of the subscriptions. Response:Data type Cardinality Response Codes Description LccnSubscription n/a Success 200
Error 400 4xxThe operation has completed successfully. - Name: Delete Subscriptions
Description: Request to delete individual subscription resource by its id
Method type: DELETE
URL for the resource: /vnflcm/v1/subscriptions/{subscriptionId}
Request:Name Description subscriptionId Identifier of the subscriptions. Response:Data type Cardinality Response Codes Description n/a n/a Success 204
Error 400 4xxThe individual subscription resource has been deleted successfully. - Name: Notification endpoint
Description: Send notifications related to VNF lifecycle changes
Method type: POST
URL for the resource: The resource URI is provided by the client when creating the subscription.
Request:Data type Cardinality Description VnfLcmOperationOccurrenceNotification 1 A notification about lifecycle changes triggered by a VNF LCM operation occurrence. VnfIdentifierCreationNotification 1 A notification about lthe creation of a VNF identifier and the related individual VNF instance resource. VnfIdentifierDeletionNotification 1 A notification about the deletion of a VNF identifier and the related individual VNF instance resource. Attribute name Data type Cardinality Supported in (V) id Identifier 1 Yes notificationType String 1 Yes subscriptionId Identifier 1 Yes timeStamp DateTime 1 Yes notificationStatus Enum (inlined) 1 Yes operationState LcmOperationStateType 1 Yes vnfInstanceId Identifier 1 Yes operation LcmOperationType 1 Yes isAutomaticInvocation Boolean 1 Yes vnfLcmOpOccId Identifier 1 Yes affectedVnfcs AffectedVnfc 0..N Yes affectedVirtualLinks AffectedVirtualLink 0..N Yes affectedVirtualStorages AffectedVirtualStorage 0..N Yes changedInfo VnfInfoModifications 0..1 Yes changedExtConnectivity ExtVirtualLinkInfo 0..N No error ProblemDetails 0..1 Yes _links LccnLinks 1 Yes Response:Data type Cardinality Response Codes Description n/a n/a Success 204
Error 4xxThe notification has been delivered successfully.
Note
virtualLinkDescId, one of the attribute contained in affectedVirtualLinks, is removed upon SOL003 version 2.6.1. However, in order to enable Tacker to expand a wide range of NFV compliant product, virtualLinkDescId will be supported in Victoria release.
- Name: Query VNF occurrence
Description: Request to show individual VNF lifecycle management operation occurrence by its id
Method type: GET
URL for the resource: /vnflcm/v1/vnf_lcm_op_occs/{vnfLcmOpOccId}
Response:Data type Cardinality Response Codes Description VnfLcmOpOcc 1 Success 200
Error 4xxThe operation has completed successfully. Attribute name Data type Cardinality Supported in (V) id Identifier 1 Yes operationState LcmOperationStateType 1 Yes stateEnteredTime DateTime 1 Yes startTime DateTime 1 Yes vnfInstanceId Identifier 1 Yes grantId Identifier 1 No operation LcmOperationType 1 Yes isAutomaticInvocation Boolean 1 Yes operationParams Object 1 Yes isCancelPending Boolean 0..N No cancelMode CancelModeType 0..N No error ProblemDetails 0..N Yes resourceChanges Structure(inlined) 0..1 Yes changedInfo VnfInfoModifications 0..N No changedExtConnectivity ExtVirtualLinkInfo 0..1 No _links LccnLinks 1 Yes
Security impact
None
Notifications impact
Tacker will creates a new subscription to notifications related to VNF lifecycle changes and send notification to consumer.
Other end user impact
None
Performance Impact
None
Other deployer impact
The previously created VNFs will not be allowed to be managed using the newly introduced APIs.
Developer impact
None
Implementation
Assignee(s)
- Primary assignee:
-
Keiko Kuriu <keiko.kuriu.wa@hco.ntt.co.jp>
Work Items
- Add new REST API endpoints to Tacker-server for LCM notifications interface of VNF instances.
- Add features which Tacker consumes Rest API for Notifications
- Add new unit and functional tests.
- Change API Tacker documentation.
Dependencies
None
Testing
Unit and functional test cases will be added for VNF lifecycle management of VNF instances.
Documentation Impact
Complete user guide will be added to explain how to invoke VNF lifecycle management of VNF instances with examples.
References
https://www.etsi.org/technologies-clusters/technologies/NFV↩︎
https://portal.etsi.org/Portals/0/TBpages/CTI/Docs/2nd_ETSI_NFV_Plugtests_Report_v1.0.0.pdf↩︎
https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/002/02.06.01_60/gs_nfv-sol002v020601p.pdf (Chapter 5: VNF Lifecycle Management interface)↩︎
https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/02.06.01_60/gs_nfv-sol003v020601p.pdf (Chapter 5: VNF Lifecycle Management interface)↩︎