Enhance Heat input on the basis of NFV SOL014

https://blueprints.launchpad.net/tacker/+spec/support-hot-according-to-nfv-sol014

This specification enhances the Tacker’s supported parameters mapped to the OpenStack’s Heat Orchestration Template (HOT) [1]. The specification adds supported parameters and focuses on how they can be mapped onto the HOT to instantiate the VNF.

Problem description

ETSI NFV SOL014 [2] specified a set of data models for information exchanged over the virtualised resource management. It also focused on implementation examples of the data models defined for the various interfaces using the HOT.

Though Tacker has already been implemented LCM operations using HOT [3] , its supported parameters were limited.

The further support of the parameters in HOT with SOL014 makes Tacker more flexible and powerful as Generic-VNFM.

Proposed change

This specification enables Tacker to support more parameters in the input data for Heat. To instantiate VNF, Tacker will generate the input data for Heat in accordance with VNF Descriptor (VNFD), information in InstantiateVnfRequest operation, and Grant operation defined in SOL001 [4] and SOL003 [5] .

Following parameters will be supported.

category

parameter

VNFD

API - InstantiateVnfRequest

API - Grant

Heat

Supported in (W)

Compute

name

tosca.nodes.nfv.Vdu.Compute

N/A

N/A

OS::Nova::Server > properties > name

NO

Compute

flavour

tosca.nodes.nfv.Vdu.Compute

N/A

vimAssets

OS::Nova::Server > properties > flavor

YES

Compute

image

tosca.artifacts.nfv.SwImage

N/A

vimAssets

OS::Nova::Server > properties > image

YES

Compute

desired_capacity

tosca.policies.nfv.InstantiationLevels, tosca.policies.nfv.VduScalingAspectDeltas, tosca.policies.nfv.VduInitialDelta

N/A

N/A

OS::Heat::AutoScalingGroup > properties > desired_capacity

NO

Compute

max_size

tosca.nodes.nfv.Vdu.Compute

N/A

N/A

OS::Heat::AutoScalingGroup > properties > max_size

NO

Compute

min_size

tosca.nodes.nfv.Vdu.Compute

N/A

N/A

OS::Heat::AutoScalingGroup > properties > min_size

NO

Compute

scaling_adjustment

N/A

addtionalParams

addtionalParams

OS::Heat::ScalingPolicy > properties > scaling_adjustment

NO

Network

ext_network

N/A

extVirtualLinks

extVirtualLinks

OS::Neutron::Port > properties > network

YES

Network

ext_subnet

N/A

extVirtualLinks

extVirtualLinks

OS::Neutron::Subnet > properties > name

YES

Network

ext_ip_address

N/A

extVirtualLinks

extVirtualLinks

OS::Neutron::Port > properties > fixed_ips > ip_address

YES

Network

ext_managed_network

tosca.nodes.nfv.VnfVirtualLink

extManagedVirtualLinks

extManagedVirtualLinks

OS::Neutron::Port > properties > network

NO

Network

ext_managed_subnet

N/A

addtionalParams

addtionalParams

OS::Neutron::Subnet > properties > name

NO

Network

ip_address

tosca.nodes.nfv.VnfVirtualLink

N/A

N/A

OS::Neutron::Port > properties > fixed_ips > ip_address

NO

Network

gateway_ip

tosca.nodes.nfv.VnfVirtualLink

N/A

N/A

OS::Neutron::Subnet > properties > gateway_ip

NO

Network

enable_dhcp

tosca.nodes.nfv.VnfVirtualLink

N/A

N/A

OS::Neutron::Subnet > properties > enable_dhcp

NO

Network

mac_address

N/A

extVirtualLinks

extVirtualLinks

OS::Neutron::Port > properties > mac_address

NO

Network

port_id

tosca.nodes.nfv.VduCp

extVirtualLinks, extManagedVirtualLinks

extVirtualLinks, extManagedVirtualLinks

OS::Neutron::FloatingIP > properties > port_id

NO

Network

network_type

tosca.nodes.nfv.VnfVirtualLink

N/A

N/A

OS::Neutron::ProviderNet > propterties > network_type, OS::Neutron::Segment > propterties > network_type

NO

Network

binding:vnic_type

tosca.nodes.nfv.VduCp

N/A

N/A

OS::Neutron::Port > properties > binding:vnic_type

NO

Network

max_kbps

tosca.nodes.nfv.VnfVirtualLink

N/A

N/A

OS::Neutron::QoSBandwidthLimitRule > properties > max_kbps

NO

Network

min_kbps

tosca.nodes.nfv.VnfVirtualLink

N/A

N/A

OS::Neutron::QoSMinimumBandwidthRule > properties > min_kbps

NO

Storage

volume_type

N/A

addtionalParams

addtionalParams

OS::Cinder::Volume > properties > volume_type

NO

Storage

volume_size

tosca.nodes.nfv.Vdu.VirtualBlockStorage

N/A

N/A

OS::Nova::Server > properties > block_device_mapping > volume_size

NO

placement

server_availability_zone

N/A

N/A

zones

OS::Nova::Server > properties > availability_zone

YES

placement

volume_availability_zone

N/A

addtionalParams

addtionalParams

OS::Cinder::Volume > properties > availability_zone

NO

placement

ServerGroup

tosca.policies.nfv.AffinityRule, tosca.policies.nfv.AntiAffinityRule

N/A

N/A

OS::Nova::ServerGroup > properties > policies

NO

other parameter

N/A

addtionalParams

N/A

other parameter

NO

To support arbitrary data type, which is not specified in standard VNF Instantiation operation, Tacker will provide several operations using the additionalParams in InstantiateVnfRequest.

The following describes the example of the input data including additionalParams.

Note

Tacker has already supported additionalParams in InstantiateVnfRequest. However, additinalParamas was only used as a flag regarding LCM operation user data. This specification will expand the use of additionalParams by allowing setting any data defined by consumers.

{
  "flavourId": "flavour_id",
  "instantiationLevelId": "instantiation_level_id",
  "extVirtualLinks": [
    {
      "resourceId": "a77119b7-fcaa-47e5-955d-29f37d5603d4",
      "id": "dc144409-bc93-48b9-be0a-7d737c01a88b",
      "extCps": [
        {
          "cpdId": "CP_0",
          "cpConfig": [
            {
              "cpProtocolData": [
                {
                  "layerProtocol": "IP_OVER_ETHERNET",
                  "ipOverEthernet": {
                    "ipAddresses": [
                      {
                        "type": "IPV4",
                        "macAddress": "fa:16:3e:aa:bb:cc",
                        "fixedAddresses": [
                          "192.168.1.1"
                        ]
                      }
                    ]
                  }
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "additionalParams": {
    "lcm-operation-user-data": "./UserData/lcm_user_data.py",
    "lcm-operation-user-data-class": "SampleUserData",
    "Cp1Network": "452e9c2f-a0b4-401e-bdea-5007ce1dfd2b",
    "Cp1IpAddress": "192.168.10.1",
    "Cp1MacAddress": "fa:16:3e:aa:bb:dd"
  }
}

Tacker will generate the input data mapped to HOT when it calls create-stack API in Heat. To address various consumers’ requirements, Tacker will provide three options to describe HOT and set corresponding additionalParams. The following data model shows sample HOT and additionalParams for each option.

  • Set parameters obtained from additionalParams within the nfv data structure.

    HOT:

    resources:
      VDU_0:
        type: OS::Nova::Server
        properties:
          name: VDU_0
          flavor: { get_param: [ nfv, VDU, VDU_0, flavor ] }
          block_device_mapping_v2: [{ device_name: "vda", volume_id : { get_resource : VDU_0_Storage } }]
          availability_zone: nova
          networks:
            - port: { get_resource: CP_0 }
            - port: { get_resource: CP_1 }
    
      CP_0:
        type: OS::Neutron::Port
        properties:
          network: { get_param: [ nfv, CP, CP_0, network ] }
          fixed_ips:
            - ip_address: [ nfv, CP, CP_0, fixed_ips, ip_address, 0 ]
          mac_address: { get_param: [ nfv, CP, CP_0, mac_address ] }
    
      CP_1:
        type: OS::Neutron::Port
        properties:
          network: { get_param : [ nfv, Cp1Network ] }
          fixed_ips:
            - ip_address: { get_param: [ nfv, Cp1IPAddress ] }
          mac_address: { get_param: [ nfv, Cp1MacAddress ] }
    
      VDU_0_Storage:
        type: OS::Cinder::Volume
        deletion_policy: Delete
        properties:
          name: VDU_0_Storage
          image: { get_param: [ nfv, VDU, VDU_0_Storage, image ] }
          size: 30
    

    parameters:

    {
      "parameters": {
        "nfv": {
          "VDU": {
            "VDU_0": {"flavor": "VDU_Flavor"},
            "VDU_0_Storage": {"image": "VDU_image"}
          },
          "CP": {
            "CP_0": {
              "network": "a77119b7-fcaa-47e5-955d-29f37d5603d4",
              "mac_address": "fa:16:3e:aa:bb:cc",
              "fixed_ips": [
                {
                  "ip_address": "192.168.1.1"
                }
              ]
            }
          },
          "Cp1Network" : "452e9c2f-a0b4-401e-bdea-5007ce1dfd2b",
          "Cp1IPAddress": "192.168.10.1",
          "Cp1MacAddress": "fa:16:3e:aa:bb:dd"
        }
      }
    }
    
  • Set parameters obtained from additionalParams outside the nfv data structure.

    HOT:

    resources:
      VDU_0:
        type: OS::Nova::Server
        properties:
          name: VDU_0
          flavor: { get_param: [ nfv, VDU, VDU_0, flavor ] }
          block_device_mapping_v2: [{ device_name: "vda", volume_id : { get_resource : VDU_0_Storage } }]
          availability_zone: nova
          networks:
            - port: { get_resource: CP_0 }
            - port: { get_resource: CP_1 }
    
      CP_0:
        type: OS::Neutron::Port
        properties:
          network: { get_param: [ nfv, CP, CP_0, network ] }
          fixed_ips:
            - ip_address: [ nfv, CP, CP_0, fixed_ips, ip_address, 0 ]
          mac_address: { get_param: [ nfv, CP, CP_0, mac_address ] }
    
      CP_1:
        type: OS::Neutron::Port
        properties:
          network: { get_param : Cp1Network }
          fixed_ips:
            - ip_address: { get_param: Cp1IPAddress }
          mac_address: { get_param: Cp1MacAddress }
    
      VDU_0_Storage:
        type: OS::Cinder::Volume
        deletion_policy: Delete
        properties:
          name: VDU_0_Storage
          image: { get_param: [ nfv, VDU, VDU_0_Storage, image ] }
          size: 30
    

    parameters:

    {
      "parameters": {
        "nfv": {
          "VDU": {
            "VDU_0": {"flavor": "VDU_Flavor"},
            "VDU_0_Storage": {"image": "VDU_image"}
          },
          "CP": {
            "CP_0": {
              "network": "a77119b7-fcaa-47e5-955d-29f37d5603d4",
              "mac_address": "fa:16:3e:aa:bb:cc",
              "fixed_ips": [
                {
                  "ip_address": "192.168.1.1"
                }
              ]
            }
          }
        }
        "Cp1Network" : "452e9c2f-a0b4-401e-bdea-5007ce1dfd2b",
        "Cp1IPAddress": "192.168.10.1",
        "Cp1MacAddress": "fa:16:3e:aa:bb:dd"
      }
    }
    
  • Set all parameters outside the nfv data structure.

    Note

    In this option, the nfv data structure is not mandatory for HOT and the input data.

    HOT:

    resources:
      VDU_0:
        type: OS::Nova::Server
        properties:
          name: VDU_0
          flavor: { get_param: nfv_VDU_VDU_0_flavor }
          block_device_mapping_v2: [{ device_name: "vda", volume_id : { get_resource : VDU_0_Storage } }]
          availability_zone: nova
          networks:
            - port: { get_resource: CP_0 }
            - port: { get_resource: CP_1 }
    
      CP_0:
        type: OS::Neutron::Port
        properties:
          network: { get_param : nfv_CP_CP_0_network }
          fixed_ips:
            - ip_address: { get_param : nfv_CP_CP_0_fixed_ips_ip_address_0 }
          mac_address: { get_param : nfv_CP_CP_0_fixed_ips_ip_mac_address }
    
      CP_1:
        type: OS::Neutron::Port
        properties:
          network: { get_param : Cp1Network }
          fixed_ips:
            - ip_address: { get_param: Cp1IPAddress }
          mac_address: { get_param: Cp1MacAddress }
    
      VDU_0_Storage:
        type: OS::Cinder::Volume
        deletion_policy: Delete
        properties:
          name: VDU_0_Storage
          image: { get_param: nfv_VDU_VOU_0_Storage_image }
          size: 30
    

    parameters:

    {
      "parameters": {
        "nfv_VDU_VDU_0_flavor": "VDU_Flavor",
        "nfv_VDU_VOU_0_Storage_image": "VDU_image",
        "nfv_CP_CP_0_network" : "a77119b7-fcaa-47e5-955d-29f37d5603d4",
        "nfv_CP_CP_0_fixed_ips_ip_address_0": "192.168.1.1",
        "nfv_CP_CP_0_fixed_ips_ip_mac_address": "fa:16:3e:aa:bb:cc",
        "Cp1Network" : "452e9c2f-a0b4-401e-bdea-5007ce1dfd2b",
        "Cp1IPAddress": "192.168.10.1",
        "Cp1MacAddress": "fa:16:3e:aa:bb:dd"
      }
    }
    

Alternatives

None

Data model impact

None

REST API impact

None

Security impact

None

Notifications impact

None

Other end user impact

None

Performance Impact

None

Other deployer impact

None

Developer impact

None

Implementation

Assignee(s)

Hirofumi Noguchi <hirofumi.noguchi.rs@hco.ntt.co.jp>

Work Items

  • Add new unit and functional tests.

  • Add new documents describing SOL014 based VNF package.

  • Enhance implementation to support SOL014 based parameters and additionalParams in LCM operation user data.

Dependencies

None

Testing

Unit and functional test cases will be added for VNF Lifecycle Management.

Documentation Impact

New documents describing SOL014 based VNF package will be added to Tacker User Guide.

References