tacker-specs/specs/victoria/enhancement_enhance-vnf-lcm...

25 KiB
Raw Permalink Blame History

Enhance VNF lifecycle management in Tacker

https://blueprints.launchpad.net/tacker/+spec/support-etsi-nfv-specs

This specification describes enhancement of VNF lifecycle management in Tacker.

Problem description

In Ussuri release, we have added limited support of VNF lifecycle management as defined in ETSI NFV SOL 0021 and SOL 0032. Tacker should support more attributes to compliant ETSI NFV SOL specification and expand a wide range of use cases.

Proposed change

For backward compatibility, VNFM supports following features:

  • to set vnfPkgId to related APIs. This parameter was present upon SOL003 version 2.4.13 , but it is removed upon SOL003 version 2.6.1.
  • Create VNF Identifier(Response)
  • Query VNF(Response)
  • List VNF Instances(Response)
  • Modify VNF Instances(Request)
  • to support attribute filtering In order to get vnfPkgId, VNFM support Attribute based filtering

1) vnfPkgId support

1-1) Flow of Create VNF Request

seqdiag {

Client; NFVO; tacker-server; tacker-conductor;

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"]; "tacker-server" -> "tacker-conductor" [label = "execute vnf_package vnfd process{vnfPkgId}"]; NFVO <- "tacker-conductor" [label = "GET /vnf_packages/{vnfPkgId}/vnfd with 'Accept' header contains 'text/plain'"]; NFVO --> "tacker-conductor" [label = "Response 200 OK with VNFD contents"]; "tacker-server" <<- "tacker-conductor" [label = "(VNFD)"]; "tacker-server" ->> "tacker-server" [label = "Update VNF instance resource(VNFD)"]; "tacker-server" -> "tacker-conductor" [label = "execute vnf_package artifact process{vnfPkgId}"]; NFVO <- "tacker-conductor" [label = "GET /vnf_packages/{vnfPkgId}/artifacts/{artifactPath}"]; NFVO --> "tacker-conductor" [label = "Response 200 OK with artifact file"]; "tacker-server" <<- "tacker-conductor" [label = "(artifact file)"]; "tacker-server" ->> "tacker-server" [label = "Store received package file"]; Client <- "tacker-server" [label = " Resonse 201 Created(vnfPkgId)"]; "tacker-server" ->> "tacker-conductor" [label = "execute notification process"]; Client <- "tacker-conductor" [label = "POST {callback URI}"]; Client --> "tacker-conductor" [label = "Responce 204 No Content"];

}

VNFM sends a GET request filtered by "vnfdId" to NFVO in order to query information of the VNF packages to get "vnfPkgId" because the APIs to get VNF packages using "vnfdId" is not supported. Since the VNF package needs to be obtained from NFVO, the obtained "vnfPkgId" is saved in the DB and used as an argument of getting VNF package request from VNFM. After that, VNFM starts the information collection sequence enabled by the configuration and collects the content/VNFD/artifact. These GET requests, "VNF package content" , "VNFD in an individual VNF package" and "Individual VNF package artifact", can be configured to execute or not for each API. After successfully obtaining the target VNF package, VNFM returns a 201 Created response containing "vnfPkgId" attribute in the payload body.

1-2) Flow of Query VNF Request

seqdiag {

Client -> "tacker-server" [label = " GET /vnf_instantces/{vnfInstanceId}"]; Client <-- "tacker-server" [label = " Resonse 200 OK (vnfPkgId)"];

}

VNFM returns a "200 OK" response that includes "vnfPkgId" in the payload body.

1-3) Flow of List VNF Request

seqdiag {

Client -> "tacker-server" [label = " GET /vnf_instantces"]; Client <-- "tacker-server" [label = " Resonse 200 OK (vnfPkgId)"];

}

VNFM returns a "200 OK" response that includes "vnfPkgId" in the payload body.

1-4) Flow of Modify VNF Request

seqdiag {

Client; NFVO; tacker-server; tacker-conductor;

Client -> "tacker-server"

[label = "PATCH /vnf_instances/{vnfInstanceId} (vnfPkgId)"];

Client <-- "tacker-server" [label = "Response 202 Accepted"]; "tacker-server" -> "tacker-conductor" [label = "execute Individual vnf_package process{vnfPkgId}"]; 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 , vnfPkgId)"]; "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"]; "tacker-server" -> "tacker-conductor" [label = "execute vnf_package vnfd process{vnfPkgId}"]; NFVO <- "tacker-conductor" [label = "GET /vnf_packages/{vnfPkgId}/vnfd with 'Accept' header contains 'text/plain'"]; NFVO --> "tacker-conductor" [label = "Response 200 OK with VNFD contents"]; "tacker-server" <<- "tacker-conductor" [label = "(VNFD)"]; "tacker-server" ->> "tacker-server" [label = "Update VNF instance resource(VNFD)"]; "tacker-server" -> "tacker-conductor" [label = "execute vnf_package artifact process{vnfPkgId}"]; NFVO <- "tacker-conductor" [label = "GET /vnf_packages/{vnfPkgId}/artifacts/{artifactPath}"]; NFVO --> "tacker-conductor" [label = "Response 200 OK with artifact file"]; "tacker-server" <<- "tacker-conductor" [label = "(artifact file)"]; "tacker-server" ->> "tacker-server" [label = "Store received package file"]; "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" ->> "tacker-conductor" [label = "VNF Modification"]; "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; Client --> "tacker-conductor" [label = "Response: 204 No Content"];

}

Client sends a modify VNF Information request which includes "vnfPkgId" attribute. After that, start the information collection sequence enabled by the configuration and collect the content/VNFD/artifact. These GET requests, "VNF package content" , "VNFD in an individual VNF package" and "Individual VNF package artifact", can be configured to execute or not for each API. VNFM will continue to modify VNF information after collecting all VNF package information correctly.

2) Support of Attribute based filtering

For an enhancement of LCM support with attribute based filering feature, the filter specification defined in SOL0134 section 5.2.2 will be supported in Victoria release.

This feature can operate below:

  • vnf_instances(GET)

Operators for attribute-based filtering

Operator with parameters Meaning
eq,<attrName>,<value> Attribute equal to <value>
neq,<attrName>,<value> Attribute not equal to <value>
in,<attrName>,<value>[,<value>]* Attribute equal to one of the values in the list ("in set" relationship)
nin,<attrName>,<value>[,<value>]* Attribute not equal to any of the values in the list ("not in set" relationship)
gt,<attrName>,<value> Attribute greater than <value>
gte,<attrName>,<value> Attribute greater than or equal to <value>
lt,<attrName>,<value> Attribute less than <value>
lte,<attrName>,<value> Attribute less than or equal to <value>
cont,<attrName>,<value>[,<value>]* String attribute contains (at least) one of the values in the list
ncont,<attrName>,<value>[,<value>]* String attribute does not contain any of the values in the list

Applicability of the operators to data types

Operator String Number DateTime Enumeration Boolean
eq

x

x

x

x

neq

x

x

x

x

in

x

x

x

nin

x

x

x

gt

x

x

x

gte

x

x

x

lt

x

x

x

lte

x

x

x

cont

x

ncont

x

The Above tables defines which operators are applicable for which data types. All combinations marked with a "x" shall be supported.

Alternatives

None

Data model impact

Modify below tables in tacker database. The corresponding schemas are detailed below:-

vnf_instances::

vnf_pkg_id vnf_pkg_id varchar(36) vnf_metadata vnf_metadata json

REST API impact (needs to be updated)

The following attributes of restFul API will be added. These attributes are based on ETSI NFV SOL0025 and SOL0036.

  • Name: Create VNF Identifier
    Description: Creates a new VNF instance resource
    Method type: POST
    URL for the resource: /vnflcm/v1/vnf_instances
    Request:
    Data type Cardinality Description

    +==================+======+======+==============================+ | CreateVnfRequest | 1 | The VNF creation parameters. | +------------------+-------------+------------------------------+

    Attribute name Data type Cardinality Support in Victoria
    vnfdId Identifier 1 Already supported in Ussuri
    vnfInstanceName String 0..1 Already supported in Ussuri
    vnfInstanceDescription String 0..1 Already supported in Ussuri
    metadata KeyValuePairs 0..1 Yes
    Response:
    Data type Cardinality Response Codes Description
    VnfInstance 1
    Success 201
    Error 400 401 403
    VNF instance identifier was created successfully.
  • Name: Query VNF
    Description: Request to existing VNF instance resource by its id
    Method type: GET
    URL for the resource: /vnflcm/v1/vnf_instances/{vnfInstanceId}
    Resource URI variables for this resource:
    Name Description
    vnfInstanceId Identifier of the VNF instance.
    Response:
    Data type Cardinality Response Codes Description
    VnfInstance 1
    Success: 200
    Error: 401 403 404
    Information about an individual VNF instance was queried successfully.
  • Name: List VNF Instances
    Description: Request to list all existing VNF instances
    Method type: GET
    URL for the resource: /vnflcm/v1/vnf_instances
    Response:
    Data type Cardinality Response Codes Description
    VnfInstance 0..N
    Success: 200
    Error: 401 403
    Information about zero or more VNF instances was queried successfully.
    Attribute name Data type Cardinality Support in Victoria
    id Identifier 1 Already supported in Ussuri
    vnfInstanceName String 0..1 Already supported in Ussuri
    vnfInstanceDescription String 0..1 Already supported in Ussuri
    vnfdId Identifier 1 Already supported in Ussuri
    vnfProvider String 1 Already supported in Ussuri
    vnfProductName String 1 Already supported in Ussuri
    vnfSoftwareVersion Version 1 Already supported in Ussuri
    vnfdVersion Version 1 Already supported in Ussuri
    vnfPkgId Identifier 1 Yes
    vnfConfigurableProperties KeyValuePairs 0..1 No
    vimConnectionInfo VimConnectionInfo 0..N -> 0..1 Yes
    instantiationState Enum 1 Already supported in Ussuri
    instantiatedVnfInfo Structure 0..1 Already supported in Ussuri
    >flavourId IdentifierInVnfd 1 Already supported in Ussuri
    >vnfState VnfOperationalStateType 1 Already supported in Ussuri
    >scaleStatus ScaleInfo 0..N Yes
    >extCpInfo VnfExtCpInfo 1..N Already supported in Ussuri
    >extVirtualLinkInfo ExtVirtualLinkInfo 0..N Already supported in Ussuri
    >extManagedVirtualLinkInfo ExtManagedVirtualLinkInfo 0..N Already supported in Ussuri
    >monitoringParameters MonitoringParameter 0..N No
    >localizationLanguage String 0..1 No
    >vnfcResourceInfo VnfcResourceInfo 0..N Already supported in Ussuri
    >vnfVirtualLinkResourceInfo VnfVirtualLinkResourceInfo 0..N Already supported in Ussuri
    >virtualStorageResourceInfo VirtualStorageResourceInfo 0..N Already supported in Ussuri
    >vnfcInfo VnfcInfo 0..N Yes
    metadata KeyValuePairs 0..1 No
    extensions KeyValuePairs 0..1 No
    _links Structure 1 Already supported in Ussuri
    >self Link 1 Already supported in Ussuri
    >indicators Link 0..1 No
    >instantiate Link 0..1 Already supported in Ussuri
    >terminate Link 0..1 Already supported in Ussuri
    >scale Link 0..1 Yes
    >scaleToLevel Link 0..1 No
    >changeFlavour Link 0..1 No
    >heal Link 0..1 Already supported in Ussuri
    >operate Link 0..1 No
    >changeExtConn Link 0..1 No
  • Name: Instantiate VNF task
    Description: This task resource represents the "Instantiate VNF" operation. The client can use this resource to instantiate a VNF instance.
    Method type: POST
    URL for the resource: /vnflcm/v1/vnf_instances/{vnfInstanceId}/instantiate
    Resource URI variables for this resource:
    Name Definition
    vnfInstanceId The identifier of the VNF instance to be instantiated.
    Request:
    Data type Cardinality Description
    InstantiateVnfRequest 1 Parameters passed to instantiate task.
    Attribute name Data type Cardinality Support in Victoria Description
    flavourId IdentifierInVnfd 1 Already supported in Ussuri Identifier of the VNF deployment flavour to be instantiated.
    instantiationLevelId IdentifierInVnfd 0..1 Already supported in Ussuri Identifier of the instantiation level of the deployment flavour to be instantiated. If not present, the default instantiation level as declared in the VNFD is instantiated.
    extVirtualLinks ExtVirtualLinkData 0..N Already supported in Ussuri Information about external VLs to connect the VNF to.
    vimConnectionInfo VimConnectionInfo 0..N -> 0..1 Already supported in Ussuri Information about VIM connections to be used for managing the resources for the VNF instance. In U release, only 0..1 VIMConnectionInfo will be accepted.
    additionalParams KeyValuePairs 0..1 Already supported in Ussuri Additional params for instantiation process, specific to the VNF being instantiated.
    extManagedVirtualLinks ExtManagedVirtualLinkData 0..N Already supported in Ussuri
    localizationLanguage String 0..1 No
    extensions KeyValuePairs 0..1 No
    Response:
    Data type Cardinality Response Codes Description
    n/a
    Success: 202
    Error: 400, 401, 403, 404, 409
    The request was accepted for processing, but the processing has not been completed.
  • Name: Terminate VNF task
    Description: This task resource represents the "Terminate VNF" operation. The client can use this resource to terminate a VNF instance.
    Method type: POST
    URL for the resource: /vnflcm/v1/vnf_instances/{vnfInstanceId}/terminate
    Resource URI variables for this resource:
    Name Description
    vnfInstanceId The identifier of the VNF instance to be terminated.
    Request:
    Data type Cardinality Description
    TerminateVnfRequest 1 Parameters passed to Terminate VNF task.
    Attribute name Data type Possible values Cardinality Support Description
    terminationType Enum (inlined) FORCEFUL GRACEFUL 1 Already supported in Ussuri
    Indicates whether forceful or graceful termination is requested.
    - FORCEFUL: The VNFM will shut down the VNF and release the resources immediately.
    - GRACEFUL: The VNFM will first arrange to take the VNF out of service. Once the operation of taking the VNF out of service finishes, it will wait for the period as specified in the gracefulTerminationTimeout and then VNFM will shutdown the VNF and release the resources.
    additionalParams KeyValuePairs 0..1 Yes Additional parameters to the termination process, specific to the VNF being terminated.
    gracefulTerminationTimeout Integer 0..1 Already supported in Ussuri This attribute is only applicable in case of graceful termination. It defines the time to wait for the VNF to be taken out of service before shutting down the VNF and releasing the resources. The unit is seconds.
    Response:
    Data type Cardinality Response Codes Description
    n/a
    Success: 202
    Error: 400, 401, 403, 404, 409
    The request was accepted for processing, but the processing has not been completed.

Security impact

None

Notifications impact

None

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 attributes to Tacker-server.
  • Add new unit and functional tests.
  • Change API Tacker documentation.

Dependencies

"Modify VNF" refered in "Proposed change" is ETSI SOL based API proposed in the spec7.

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


  1. 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)↩︎

  2. 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)↩︎

  3. https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/02.04.01_60/gs_nfv-sol003v020401p.pdf (Chapter 5: VNF Lifecycle Management interface)↩︎

  4. https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/013/02.06.01_60/gs_nfv-sol013v020601p.pdf (Chapter 5: Result set control)↩︎

  5. 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)↩︎

  6. 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)↩︎

  7. https://review.opendev.org/#/c/731697/↩︎