GithubHelp home page GithubHelp logo

sonata-nfv / son-schema Goto Github PK

View Code? Open in Web Editor NEW
2.0 2.0 19.0 324 KB

The schema files for the various descriptors used by SONATA

Home Page: http://www.sonata-nfv.eu

License: Apache License 2.0

Shell 100.00%
descriptors nfv nfv-descriptors nfv-platform nfv-schema sdn sonata

son-schema's People

Contributors

cgeoffroy avatar hkarl avatar jbonnet avatar lconceicao avatar mbredel avatar mpeuster avatar shuaibsiddiqui avatar sonata-jenkins avatar stevenvanrossem avatar tsoenen avatar wtaverni avatar xilouris avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

son-schema's Issues

[VNFD] [NSD] Add/modify complex interface types

The type of interface has to specified for the connections points of the VNFCs, the VNFs, and the NSs. Right now, we only support strings to name the type "interface" as an interface-type.

We might want to have more interface types like:

  • interfaces
  • ports
  • VPN endpoints

Moreover, we need to a way to configure these interface types.

Deployment flavours of VNFs and NSs

The ETSI specification names deployment flavors of an VNF (and a NS). A deployment flavor references the VDUs (VNFs) and VNFCs (VNFFGs) that are actually deployed. Right now, this is not address in our descriptors.

Question is: Should we limit our descriptors such that they only contain one VNFC (VNFFG)? This would make things much easier. If we support multiple VNFCs( VNFFGs), we also need to implement the deployment flavors.

Improve package_content

As it is, package_content is just an array of items that are part of the package. Since this content is finite, I think it could be improved if more structure could be added, e.g. (WARN: syntax not checked):

...
package_content:
   - service_descriptors:
      name: "sonata-demo.yml"
      content-type: "application/sonata.service_descriptor"
      md5: "a16ce1b66bd6d6916c8f994efca0d778"
    - function_descriptors :
      name: "/iperf-vnfd.yml"
      content-type: "application/sonata.function_descriptor"
       md5: "f99cb6eaf0cd0e4215a724893b55cf5c"
...

This would ease/speed-up interpretation of the package_content, and I guess would have a rather small extra cost.

Input sections

The TOSCA and the HOT descriptors allow the parameterization of the template. To this end, they specify input sections that contain parameter templates that have to be provided at the instantiation of the template. ETSI also foresees such a feature.

We might want to integrate an input section into our descriptors as well.

Provide type of licence field for services and functions

To implement the two different kinds of licensing for services and functions we have agreed, I suggest to add somewhere within the descriptors a licence type field. If absent, the service/function would be considered Public (i.e., any developer can reuse it, any customer can buy). If present and with Private value, an extra field should also be present and filled with a URL (i.e., download by a developer or acquisition by a customer will call this URL for validation). I think that in this way we can remove most of the complexity of managing software licences, while allowing for scenarios where that can be taken into account.

What do you think?

Are the "id" fields unique in a file ?

For example, in the iperf VND, there is 2 elements with the id mgmt: a virtual_link and a connection_point.

It's a little counter-intuitive as an id generally refers to a unique target (at least in the scope of a file).

VNF version mismatch in sonata-demo packages

In the sonata-demo packages (sonata-demo.son and sonata-demo-docker.son) the version of VNFs (vnd_version) in service descriptor does not match the version of the VNFs in function descriptors. The service descriptor sonata-demo.yml specifies the VNFs "firewall-vnf", "iperf-vnf" and "tcpdump-vnf" with version "0.1", however all this VNF descriptors (firewall-vnfd.yml, iperf-vnfd.yml and tcpdump-vnfd.yml) have the version "0.2".

This causes a problem in matching the correct VNFs specified in the service descriptor, particularly in son-catalogue server which uses the pair <vnf_vendor, vnf_name, vnf_version> for identifying VNFs.

[VNFD] Adding FSM-support to VNFD

We need to add support for function specific managers (FSMs) to the VNF descriptors. The FSM section might be very similar to the VDU section. Using connection points, the FSMs could be connected to VDUs directly via virtual links.

In addition we need away to express messages and topics to allow the FSMs to interact with the service platform message bus.

connection point definition in VNFD

It should be more clear if the definition of CPs in the VNFD included an additional tag for notifying possible use of floating IPs

I have included in vTC VNFD this example.

[VNFD] Remove the virtual_link_reference from connection_points

The connection-point parameter contains a reference to the virtual-link that is connected to it (and vice versa). This, however, creates a cyclic reference which is error prone.

Since it is the virtual links that create the VNFC, the reference in the connection points could be removed without any loss of information. However, this would contradict the ETSI NFV specification.

Should we remove the virtual link references form the connection points?

Do docker_files deserve primetime?

Docker files appear in the examples as a folder in parallel to service/function descriptors. Do they deserve that? Shouldn't they be subordinate to (i.e., within the folders of) services/functions?

Licences (en-UK) can't be an array

In our schemata, licences (using en-UK) are currently specified as being an array. I don't see any valid use case for such a model, do you? Shouldn't a licence be either absent (so we'd consider the service/function as being 'public') or present, as in

licence:
  type: "public"

or

licence:
  type: "private"
  url: "http://some.url"

(url being mandatory in the case of a private type of licence)

Note the singular form and en-UK licence.

The untouchable NSD & VNFD

We plan to have Package catalogue, NS catalogue, VNF Catalogue, etc in the SP-Catalogues. Does this imply that a authorized developer can download a package (including PD, NSD & VNFDs, images, etc.) or a NS (including NSD, VNFD, images, etc) or a VNF (including VNFD, image, etc.) ?

The reason I ask this question is, if the answer to above question is YES then the vm_image path in the VNFD has to be edited according to the VNF.zip file to be returned to the requested developer, as we are not going to send back the complete package.zip file that was prepated by the original/author developer. Thus our efforts to keep the VNFD untouched will go in vain anyway.

This occurs because we receive a complete Network Service package, we extract it and store its contents separately and make them available to other developer as separate entities.

The Curious Case of *.descriptor IDs

Following up on @tsoenen vnfd_id query in sonata-nfv/son-mano-framework#33, I try to present the issue below:

If we want to keep the PD, NSD, & VNFD untouced within SP, then how do we handle

i) the URIs of the image stored by GK (after extraction, parsing, & validation) ?
a) Do we consider URLs entered by the developer for downloading the image only? That is no need for GK to store the image anywhere. [Note: SP may get errors in the middle of instantiation procedure if the URL is not working.]
b) If the GK stores the image somewhere locally, then do we edit the VNFD to store the info in virtual_deployment_units:vm_image field?

ii) the UUIDs generated by the SP-Catalogues.
a) If the NSD will use the internal ids (vnf_id) to reference different VNFs in it, then what is the purpose of generating UUIDs in the SP-Catalogue? Because the VNFD can be uniquely identified by the naming convention anyway. In case of service instantiation, the GK will fetch the required VNFDs by their unique names as found in the package/NS descriptor.
b) we edit the NSD/VNFD and replace the id field by the generated UUIDs. [Note: If a developer fetches a NSD/VNFD from SP-Catalogue then this id field should be replaced with its unique name value.]

I hope i captured all the aspects of the discussion we had on this topic. Please add if I have missed something out.

[PKG] Buggy references in the demo package

  • The references of the Docker images from the VNFDs in the sonata demo package to the files in the package are not correct.
  • The VDU references in the VNFDs in the sonata demo package are not correct.

[VNFD] Referencing VM images in the VNFD

In the VDU section of the VNFD we reference a virtual machine image. Questions are:

  • How can we reference a VM image uniquely? A UUID is hard to read/write for humans. A simple name might be ambiguous. In fact we could have the same VNFD referencing the same VM image, but the image might be different - resulting in a different VNF.

Incorrect connectivity graph in service descriptor of Y1 demo

The service descriptor sonata-demo.yml contained in the package sonata-demo.son for Y1 has an incorrect connectivity graph in the virtual_links section. In line 80 it is defined vnf_firewall:output and I think it should be "vnf_tcpdump:output".

bandwidth_units missing in nsd-schema.yml

bandwidth_units definition is missing in nsd-schema.yml and the validation is failing when bandwidth QoS contraints are added in the NS descriptor. In vnfd-schema is properly defined:
bandwidth_units:
enum:
- "bps" # Bit per second
- "kbps" # Kilobit per second
- "Mbps" # Megabit per second
- "Gbps" # Gigabit per second
- "Tbps" # Terabit per second

I will create a PR to add this missing definition.

Imports of other YAML files

The descriptors can become quite complex. It might be beneficial to allow imports of other YAML files to a descriptor. Thus, the descriptor could be split in several files.

  • TOSCA allows that already
  • Our NS descriptor allows the specification of external virtual link descriptors (VLDs) as well as forwarding graph descriptors (VNFFGs) already. At least theoretically.

[NSD] NS Monitoring

Describing monitoring for NS is in a very early stage. It is basically copy-and-paste from the T-NOVA descriptors. Questions are:

  • What monitoring parameters do we want to support?
  • What is the best way to describe the monitoring parameters?

Alignment with etsi's fields

We are evaluating the vnfd-schema and vfd-schema-metadata decomposition and we think that as a first approach it’s a nice approach. But it’s not aligned with ETSI's information model
(http://www.etsi.org/deliver/etsi_gs/NFV-MAN/001_099/001/01.01.01_60/gs_nfv-man001v010101p.pdf):

  • group/name/version initially applied only to our packages. Does this mean that now this applies to all entities?
  • Prefixes, field names like "vnf_" are not necessary, maybe the best approach should be to use the same name for the information and data model fields. For example, the deployment_flavours field case, where the data model uses the same name as the information model but it is represented by a complex structure.

If we want to use the same fields aligned with ETSI we propose the use of complex types. For example:

Id (ID (e.g. name) of this VNFD):
Complex structure composed by:

  •      UUID
    
  •      Group
    
  •      Name
    

vendor (Version of the VNF Descriptor):
Complex structure composed by

  •      Author
    
  •      Vendor
    
  •      Creation date
    

version (Version of VNF software, described by the descriptor under consideration):
Complex structure composed by

  •      Version
    
  •      description
    

Currently the ETSI is working in a new draft of the information model (https://docbox.etsi.org/ISG/NFV/Open/Drafts/IFA015_NFV_Information_Model). We think that if we are aligned with ETSI’s model, it’s much easier to adapt our model to reflect future updates from ETSI definitions.

Author identification

Could we use an email address for identifying a package author? Or, when we consider users, we could use the user name...? If we use GitHub users, we could reuse those...

What do you think?

add vnf_id to the service record

see discussion here:sonata-nfv/son-gkeeper#504

Its needed to include the vnf_id specified in the NSD, also in the NSR.
The SLM uses the NSR schema to validate the NSR.
Currently, the service record mentions only this:

"network_functions": [
{
"vnfr_id": "xxxxx"
},
{
"vnfr_id": "yyyyy"
}
],
can vnf_id be added?

[VNFD] Remove sophisticated parameters in the VNFD schema.

The VNFD schema contains a lot of parameters coming from the ETSI specification and the T-NOVA implementation. Things like:

  • large_pages_required and numa_allocation_policy of the memory section
  • SR-IOV (Single Root I/O Virtualization) for NICs and PCI entities
  • PCI specific parameters
  • many more

Are we going to support these things eventually? Do we really need them in the VNFD - for now at least? Or should we remove them now and focus on things we really implement?

Package/Service/Function validator

I think that a REST-based micro-service that could validate any of the entities Package/Service/Function could fit well here, what do you think? I'm seeing multiple other micro-services taking advantage of this 'centralised' feature...

[NSD] Adding SSM-support to NDS

We need to add support for service specific managers (SSMs) to the NS descriptors. The SSM section might be very similar to the VNF section. Using connection points, the SSMs could be connected to VNFs directly via virtual links.

In addition we need away to express messages and topics to allow the SSMs to interact with the service platform message bus.

[VNFD] VNF Monitoring

Describing monitoring for VNFs is in a very early stage. It is basically copy-and-paste from the T-NOVA descriptors. Questions are:

  • What monitoring parameters do we want to support?
  • What is the best way to describe the monitoring parameters?

Is the character ':' a path separator for id ?

The current examples make an heavy usage of the ':' character in id and ..._ref fields. But the character : can have multiple meanings, for example in the iperf NSD:

        connection_points:
          - connection_point_ref: "ns:input"
            position: 1
          - connection_point_ref: "vnf_iperf:input"
            position: 2

First "ns:input" refers to the element of id ns:input in the current file. So in this case : don't have any signification.
Whereas "vnf_iperf:input" refers to: an element of id input contained in an external file (a VNFD in this case) fetch-able by the vnf_vendor,vnf_name,vnf_version tuple located under the element of vnd_id = vnf_iperf in the current file.

Is my interpretation totally ludicrous or is it voluntary to have multiple way to interpret the connectio_point-ref field ?. It renders the programmability on descriptor a little more complex.

I would propose to ban the : character from any id or name fields so they only appear in the ..._ref fields as a separator. But it may be too risky with the upcoming demo.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.