##
# 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
##

{
    "${}":[
        "${name} provide a name (VM)",
        "${description} provide a description (${name})",
        "${image_id} provide image_id uuid",
        "${flavor_id} provide flavor_id uuid",
        "${network0} provide a bridge network id; enter='default' (00000000-0000-0000-0000-000000000000)",
        "${network1} provide a bridge network id; enter='virbrMan' (60f5227e-195f-11e4-836d-52540030594e)"
    ],
"server":{
    "networks":[
        {
            "name":"mgmt0",
            "vpci": "0000:00:0a.0",
            "uuid":"${network0}"
        },
        {
            "name":"ge0",
            "vpci": "0000:00:0b.0",
            "uuid":"${network1}"
        }
    ],
    "name":"${name}", 
    "description":"${description}",
    "imageRef":  "${image_id}", 
    "flavorRef": "${flavor_id}" 
}
}
