this is the DM agreed to R2 and maintenance release page version 35.

the final R3 DM is still under discussion.


any change to this page done by someone other then Victor Gao or Michael Lando will be reverted thank you.

Node Types
tosca.nodes.nfv.VDU.Compute
tosca.nodes.nfv.Vdu.Compute:
  derived_from: tosca.nodes.Root
  properties:
    #id:
      # node name
    name:       # align with the IM, please refer to https://wiki.onap.org/display/DW/Design+Time+Model+Clean+Version#DesignTimeModelCleanVersion-Class:VDU/VDUDesc
      type: string
      required: true
    description:
      type: string
      required: true
    boot_order:
      type: map # explicit index (boot index) not necessary, contrary to IFA011. In the IM, it shoul be a array of KeyValuePair/NameValuePair
      entry_schema:
        type: string
      required: false 
    nfvi_constraints:  
      type: map # Align with IM, it shoul be a array of KeyValuePair/NameValuePair
      entry_schema:
        type: string
      required: false
    configurable_properties: 
       type: map   #In the IM, the multipilicity of VnfcConfigurableProperties is 1, not a map.
       entry_schema:
          type: tosca.datatypes.nfv.VnfcConfigurableProperties
       required: true 
    vdu_profile:          
       type: tosca.datatypes.nfv.VduProfile
       required: true
    inject_files: # Used for vCPE usecase Aligned with ONAP R2 IM. not defined in IFA011 v2.4.1 and SOL001 v0.6.0.
       type: tosca.datatypes.nfv.injectFile
       required: false  #Aligned with ONAP R2 IM. it should be false.
    meta_data: #metadata attached to the VM or container
       type: map
       entry_schema:
         type: string
       required: false
    user_data: #cloudinit userdata script support
      type: string
      required: false
  #attributes: NOT DEFINED IN ONAP IM and SOL001
    #private_address:
    #  status: deprecated
    #public_address:
    #  status: deprecated
    #networks:
    #  status: deprecated
    #ports:
    #  status: deprecated
  capabilities:
    virtual_compute: 
      type: tosca.capabilities.nfv.VirtualCompute
    virtual_binding: 
      type: tosca.capabilities.nfv.VirtualBindable
      occurrences: [1, UNBOUND]
    monitoring_parameter:     
      type: tosca.capabilities.nfv.Metric # this is not a very clear data structure enough to be coded, suggest to be annotated.
      occurrences: [0,UNBOUND]
  requirements:
    - virtual_storage:
        capability: tosca.capabilities.nfv.VirtualStorage
        relationship: tosca.relationships.nfv.Vdu.AttachedTo
        node: tosca.nodes.nfv.VDU.VirtualStorage
        occurences: [ 0, UNBOUNDED ]
  artifacts:    
    - sw_image:
        file:    
        type: tosca.artifacts.nfv.SwImage
tosca.nodes.nfv.VDU.VirtualStorage
tosca.nodes.nfv.Vdu.VirtualStorage: 
  derived_from: tosca.nodes.Root
  properties:
    #id:
      # node name
    type_of_storage:
      type: string
      constraints:
          - valid_values: [volume, object, root, block]
      required: true 
    size_of_storage:
      type: scalar-unit.size
      required: true
    vdu_storage_requirements: 
      type: map
      required: false
    rdma_enabled:
      type: boolean
      required: false
  capabilities:
    virtual_storage:
      type: tosca.capabilities.nfv.VirtualStorage
  artifacts:  
    - sw_image:
        file:       
        type: tosca.artifacts.Deployment.Image
#interfaces: # not needed for virtualstroage. it doesn't support cloudinit.
#	cloudinit:
#       type:tosca.interfaces.nfv.vdu.cloudinit
tosca.nodes.nfv.Cp
tosca.nodes.nfv.Cp:
  derived_from: tosca.nodes.Root 
    properties:
    layer_protocol:
      type:list
      entry_schema:
        constraints:
          - valid_values: [ethernet, mpls, odu2, ipv4, ipv6, pseudo_wire ]
      required:true
    role: #Name in ETSI NFV IFA011 v0.7.3 cpRole
      type:string
      constraints:
        - valid_values: [ root, leaf ]
      required:false
    description:
      type: string
      required: false
    protocol_data:
      type: list
      entry_schema:
        type: tosca.datatypes.nfv.CpProtocolData
      required:true
    trunk_mode:
      type: boolean
      required: true
    allowed_address_data: # Aligned with ONAP R2 Im.not defined in IFA011 v2.4.1 and SOL001 v0.6.0.                        
      type: tosca.datatypes.nfv.AddressData   # In the IM, it is a array, but here it is not a array. TBD.
      required: false
tosca.nodes.nfv.VduCp
tosca.nodes.nfv.VduCp:
  derived_from: tosca.nodes.nfv.Cp
  properties:
    bitrate_requirement:
      type: integer
      required:false
    vnic_name: #  Aligned with ONAP R2 Im.not defined in IFA011 v2.4.1 and SOL001 v0.6.0. 
      type: string
      required:false
    vnic_order: # Aligned with ONAP R2 Im. not defined in IFA011 v2.4.1 and SOL001 v0.6.0. 
      type: integer
      required:false
    vnic_type: # Aligned with ONAP R2 Im. not defined in IFA011 v2.4.1 and SOL001 v0.6.0
      type: string
	  constraints:
          - valid_values: [normal, macvtap, direct, baremetal, direct-physical, virtio-forwarder]
      required:false
    virtual_network_interface_requirements: 
      type: list
      entry_schema:
        type: VirtualNetworkInterfaceRequirements
      required:false
   # order:      #there is no this attribute in IM.
   #   type: integer
   #   required: false
   #   constraints:
   #     - greater_or_equal: 0
    requirements:
        - virtual_link:
          capability: tosca.capabilities.nfv.VirtualLinkable
          relationship: tosca.relationships.nfv.VirtualLinksTo
          node: tosca.nodes.nfv.VnfVirtualLink    
        - virtual_binding:
          capability: tosca.capabilities.nfv.VirtualBindable
          relationship: tosca.relationships.nfv.VirtualBindsTo
          node: tosca.nodes.nfv.Vdu.Compute
tosca.nodes.nfv.VnfVirtualLink
tosca.nodes.nfv.VnfVirtualLink:
  derived_from: tosca.nodes.Root
  properties:
    connectivity_type:
      type: tosca.datatypes.nfv.ConnectivityType
      required: true
    description:
      type: string
      required: false
    test_access:
      type: list
      entry_schema:
        type: string
      required: false
    vl_profile:
      type: tosca.datatypes.nfv.VlProfile
      required: true
  capabilities:
    monitoring_parameter:   # this is not a very clear data structure enough to be coded, suggest to be annotated.
      type: tosca.capabilities.nfv.Metric
      occurrences: [0,UNBOUND]
    virtual_linkable:
      type: tosca.capabilities.nfv.VirtualLinkable
tosca.nodes.nfv.VNF
tosca.nodes.nfv.VNF:
  derived_from: tosca.nodes.Root
  properties: 
    descriptor_id: # instead of vnfd_id
      type: string # GUID
      required: true
    descriptor_version: # instead of vnfd_version
      type: string
      required: true
    provider: # instead of vnf_provider
      type: string
      required: true
    product_name: # instead of vnf_product_name
      type: string
      required: true
    software_version: # instead of vnf_software_version
      type: string
      required: true
    product_info_name: # instead of vnf_product_info_name
      type: string
      required: false
    product_info_description: # instead of vnf_product_info_description
      type: string
      required: false
    vnfm_info:
      type: list
      entry_schema:
        type: string
      required: true
    localization_languages:
      type: list
      entry_schema:
        type: string
      required: false
    default_localization_language:
      type: string
      required: false
    configurable_properties:
      type: tosca.datatypes.nfv.VnfConfigurableProperties
      required: false
    modifiable_attributes:
      type: tosca.datatypes.nfv.VnfInfoModifiableAttributes
      required: false  # true in IFA011, but all of members are false. Align with the IM, it is false
    flavour_id:
      type: string
      required: true  
    flavour_description:
      type: string
      required: true  
  capabilities:
    # monitoring_parameter:
      # modelled as ad hoc capabilities in the VNF node template
  requirements:
    - virtual_link:
        capability: tosca.capabilities.nfv.VirtualLinkable
        relationship: tosca.relationships.nfv.VirtualLinksTo
        node: tosca.nodes.nfv.VnfVirtualLink
        occurrences: [ 0, UNBOUNDED ]
  interfaces:
    Nfv:
      type: tosca.interfaces.nfv.vnf.lifecycle.Nfv
  • No labels

13 Comments

  1. Per our sub modeling call today, I update all of the Node types to align with SOL001 v0.6.0. https://docbox.etsi.org/ISG/NFV/Open/Drafts/SOL001_TOSCA_desc/NFV-SOL001v060.zip

    For the tosca.nodes.nfv.VDU.Composistion, I commented it out the entire node type definitions, without deleting it.  this node type is no long applicable. the clean approach is described in SOL001 v0.6.0 Annex A.4, via using substitution_mapping method.  My recommendation is to remove it from the wiki page.

  2. I agree with Thinh. Tks for the update.

  3.  I agree with Thinh. This is not part of IM, it is not in SOL, Same properties defined in VDU.Compute

  4. VDU.compute node:

       1.In IFA 011 V2.4.1 boot order is a keyvaluepair. 

        2. Inject_files are string is not enough, in openstack is like this, please refer it.


     "personality": [
                {
                    "path": "/etc/banner.txt",
                    "contents": "ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBp dCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5k IGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVs c2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4g QnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRo ZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlv dSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vy c2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6 b25zLiINCg0KLVJpY2hhcmQgQmFjaA=="
                }
            ],

     VNF node:

    1.  does the modifiable_attributes which is required true, but in fact the value is none, supported in tosca grammar? 

         I  think false is possible.

    2. Considering some vnfd do not need to have the flavor, is it possible to change the requirement of flavor id and description to false?

  5. FYI. I just fixed couple grammar errors

  6. In ONAP R2 IM, it only contains the use case that an exteranl CP will be exposed by a Vdu CP, so the tosca.nodes.nfv.VnfExtCp is not needed for R2 DM.

  7. FYI,  all I modified, I have made a note, please check it.

    1.I fixed some name conventions(vnicName(vnic_name)...)

    2. some types of properties are needed to be aligned with IM.

    3.Some properties also are needed  to be TBD, for example inject_files structure,monitoring_parameter, etc.

    4. To consider the compatiblity, please consider change some property requirements to  be false

        flavor related, profile related.


  8. tosca.capabilities.nfv.VirtualStorage in Vdu.VirtualStorage and the relaitonship type between Vdu.Compute and Vdu.VirtualStorage are missing, a proposal is needed.


  9. 2 things are missing in tosca.nodes.nfv.VDU.Compute:

    - a way to specify  login information to the VDU VM, including ssh login username, ssh public/private keys. OpenStack need this when creating VMs for user to access.

    - a way to specify the cloudinit user-data script. cloudinit user-data script is very useful when configuring VDU VM. In heat, it can be done as the followings:

          user_data:
            str_replace:
              params:
                __dcae_collector_ip__: { get_param: dcae_collector_ip }
                __repo_url_blob__ : { get_param: repo_url_blob }
              template: |
                #!/bin/bash
                # Create configuration files
                mkdir /opt/config
                echo "__dcae_collector_ip__" > /opt/config/dcae_collector_ip.txt
                # Download and run install script
                curl -k __repo_url_blob__/org.onap.demo/vnfs/vcpe/v_aaa_install.sh -o /opt/v_aaa_install.sh
                cd /opt
                chmod +x v_aaa_install.sh
                ./v_aaa_install.sh

    The heat will first replace the user_data template script with params defined in str_replace, then pass the replaced user_data template script as cloudinit user-data script when creating the VDU VM. 

    We need a similar way in tosca to do this too. Some people suggest to use tosca.interfaces.node.lifecycle.Standard interface such as https://github.com/openstack/tosca-parser/blob/master/toscaparser/tests/data/CSAR/tosca_elk/Definitions/tosca_elk.yaml#L78 , but the standard interface will pass the params to scripts as envrionment variables, which is not supported by cloudinit. 



    1. Lianhao Lu

      1. What documents are you comparing?
      2. We need to have a generic solution that works across not only OpenStack but also other "VIMs"..
      3. We need to follow what has been defined in the specs....


    2. user_data together with cloudinit capability is required by many applications today. Can we add the user_data property into node type tosca.nodes.nfv.VDU.Compute and follows the exactly same schema in HEAT?

  10. HI Alex


    Regarding virtualStorage,

       type_of_storage:
          type: string
          constraints:
              - valid_values: [volume, object, root, block]

    I think volume and block are the same thing.

  11. local disk in the openstack is created with the VM, not a independent API or managed object.  When define it as a node in TOSCA, how to manage the node via the tosca interfaces?