##
# Copyright 2015 Telefónica Investigación y Desarrollo, S.A.U.
# This file is part of openmano
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# For those usages not covered by the Apache License, Version 2.0 please
# contact with: nfvlabs@tid.es
##
---
vnf:
    name: TEMPLATE
    description: This is a template to help in the creation of your own VNFs
    # class: parent      # Optional. Used to organize VNFs
    external-connections:
    -   name:              mgmt0
        type:              mgmt        # "mgmt" (autoconnect to management net), "bridge", "data"
        VNFC:              TEMPLATE-VM # Virtual Machine this interface belongs to
        local_iface_name:  mgmt0       # interface name inside this Virtual Machine (must be defined in the VNFC section)
        description:       Management interface
    -   name:              xe0
        type:              data
        VNFC:              TEMPLATE-VM
        local_iface_name:  xe0
        description:       Data interface 1
    -   name:              xe1
        type:              data
        VNFC:              TEMPLATE-VM
        local_iface_name:  xe1
        description:       Data interface 2
    -   name:              ge0
        type:              bridge
        VNFC:              TEMPLATE-VM
        local_iface_name:  ge0
        description:       Bridge interface
    VNFC:                              # Virtual machine array 
    -   name:        TEMPLATE-VM       # name of Virtual Machine
        description: TEMPLATE description
        VNFC image: /path/to/imagefolder/TEMPLATE-VM.qcow2
        # image metadata: {"bus":"ide", "os_type":"windows", "use_incremental": "no" } #Optional
        # processor:                     #Optional
        #     model: Intel(R) Xeon(R) CPU E5-4620 0 @ 2.20GHz
        #     features: ["64b", "iommu", "lps", "tlbps", "hwsv", "dioc", "ht"]
        # hypervisor:                    #Optional
        #     type: QEMU-kvm
        #     version: "10002|12001|2.6.32-358.el6.x86_64"
        # vcpus: 1          # Only for traditional cloud VMs. Number of virtual CPUs (oversubscription is allowed).
        # ram: 1024         # Only for traditional cloud VMs. Memory in MBytes (not from hugepages, oversubscription is allowed)
        # disk: 10          # disk size in GiB, by default 1
        numas: 
        -   paired-threads: 5          # "cores", "paired-threads", "threads"
            paired-threads-id: [ [0,1], [2,3], [4,5], [6,7], [8,9] ] # By default follows incremental order
            memory: 14                 # GBytes
            interfaces:
            -   name:      xe0
                vpci:      "0000:00:11.0"     
                dedicated: "yes"         # "yes"(passthrough), "no"(sriov with vlan tags), "yes:sriov"(sriovi, but exclusive and without vlan tag)
                bandwidth: 10 Gbps
                # mac_address: '20:33:45:56:77:44' #avoid this option if possible
            -   name:      xe1
                vpci:      "0000:00:12.0"
                dedicated: "yes"
                bandwidth: 10 Gbps
                # mac_address: '20:33:45:56:77:45' #avoid this option if possible
        bridge-ifaces:
        -   name:      mgmt0
            vpci:      "0000:00:09.0"    # Optional. Virtual PCI address
            bandwidth: 1 Mbps            # Optional. Informative only
            # mac_address: '20:33:45:56:77:46' #avoid this option if possible
            # model:       'virtio'      # ("virtio","e1000","ne2k_pci","pcnet","rtl8139") By default, it is automatically filled by libvirt
        -   name:      ge0
            vpci:      "0000:00:10.0"
            bandwidth: 1 Mbps
            # mac_address: '20:33:45:56:77:47' #avoid this option if possible
            # model:       'virtio'      # ("virtio","e1000","ne2k_pci","pcnet","rtl8139") By default, it is automatically filled by libvirt
        devices:                       # Optional, order determines device letter asignation (hda, hdb, ...)
        -   type:      disk            # "disk","cdrom","xml"
            image:     /path/to/imagefolder/SECOND-DISK.qcow2
            # image metadata: {"bus":"ide", "os_type":"windows", "use_incremental": "no" }
            # vpci:      "0000:00:03.0"   # Optional, not for disk or cdrom
        -   type:      cdrom
            image:     /path/to/imagefolder/CDROM-IMAGE.qcow2
            # image metadata: {"bus":"ide", "os_type":"windows", "use_incremental": "no" }
        -   type:      xml
            image:     /path/to/imagefolder/ADDITIONAL-DISK.qcow2   # Optional, depending on the device type
            image metadata: {"bus":"ide", "os_type":"windows", "use_incremental": "no" }  # Optional, depending on the device type
            vpci:      "0000:00:03.0"                          # Optional, depending on the device type (not needed for disk or cdrom)
            xml:   '   xml text for XML described devices. Do not use single quotes inside
                       The following words, if found, will be replaced:
                       __file__    by image path, (image must be provided)
                       __format__  by qcow2 or raw (image must be provided)
                       __dev__     by device letter (b, c, d ...) 
                       __vpci__    by vpci (vpci must be provided)
                   '
    # Additional Virtual Machines would be included here

