##
# Copyright 2015 Telefónica Investigación y Desarrollo, S.A.U.
# This file is part of openvim
# 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
##

server:
    name:         vm-name         # name 
    description:  vm-description  # Optional user description
    imageRef:     24640fe0-8a9e-11e4-a236-52540056c317   # valid image uuid 
    flavorRef:    e22dd8a8-9ca5-11e4-99b6-52540056c317   # valid flavor uuid
    networks:  # List of control plane interfaces, Optional
    -   name:     mgmt0          #friendly user name
        vpci:     "0000:00:0a.0" #Optional guess PCI
        uuid:     c09b2f1a-8a9e-11e4-a236-52540056c317   # valid network uuid
        #mac_address:  #guess concrete mac address, by default one is asigned
        #model:        "virtio","e1000","ne2k_pci","pcnet","rtl8139", By default auto, normally virtio
    start:    "yes"    # "yes","no","paused".  By default it is started upon creted
    hostId:   ec656bc4-9ca5-11e4-99b6-52540056c317      #prefered host where to allocate
   
    # allocating EXCLUSIVE resoureces in the same NUMA node. 
    # If provided, it overrides extended values at flavor
    extended:                             # optional
        processor_ranking: 100            # minimal processor family. Not used in current version
        numas:                            # list of numa set. Only one supported in current version
        -  memory:         8              # GByte of huge pages at this numa

           #Choose among one of "cores", "paired-threads", "threads"
           paired-threads: 5              # Cores with two paired hyper threads
           #paired-threads-id: [[0,1],[2,3],[4,5],[6,7],[8,9]] # Guess pinning. By default follows incremental order
           #threads:       10             # threads awereness of the hyperthreading
           ##threads-id: [0,1,2,3,4,5,6,7,8,9] #Optional. Guess pinning
           #cores:         5              # Complete cores, without hyperthreading. VIM ensures the other paired thread is idle
           ##cores-id:      [0,1,2,3,4]   # Optional. Guess pinning of cores

           #Optional: Dataplane needed interfaces
           interfaces:                    
           -   name:       xe0            # Optional. User friendly name
               vpci:       "0000:00:10.0" # Optional. Guess PCI 
               bandwidth:  10 Gbps        # Needed minimun bandwidth
               dedicated:  "yes"          # "yes"(passthrough), "no"(sriov with vlan tags), "yes:sriov"(sriovi, but exclusive and without vlan tag)
               # you can attach this inteface to a network at server creation or later with a port attach
               #uuid:       41bcac58-9be9-11e4-b1b6-52540056c317 # Attach the interface to this network uuid
           -   name:       xe1
               vpci:       "0000:00:11.0"
               bandwidth:  10 Gbps
               dedicated:  "no"
               #mac_address:  #guess concrete mac address, by default one is asigned. Not possible for dedicated: "yes"
           
        #Optional: List of extra devices
        devices:                       # order determines device letter asignation (hda, hdb, ...)
        -   type:      disk            # "disk","cdrom","xml","usb"
            imageRef:  37598e34-ccb3-11e4-a996-52540030594e # UUID of an image, only for disk,cdrom,xml
            # vpci:      "0000:00:03.0"   # Optional, not for disk or cdrom
            # xml:     'Only for type xml: a XML described device xml text. Do not use single quotes inside
            #        The following words, if found, will be replaced:
            #        __file__    by image path, (imageiRef must be provided)
            #        __format__  by qcow2 or raw (imageRef must be provided)
            #        __dev__     by device letter (b, c, d ...)
            #        __vpci__    by vpci (vpci must be provided)

