##
# Copyright 2015 Telefonica Investigacion 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
##
---
name:            insert a name for the scenario
description:     insert a description for the scenario
topology:
  nodes:
    vnf1:                     # vnf/net name in the scenario
      type:      VNF          # VNF, network, external_network (if it is a datacenter network)
      VNF model: vnf_model1   # VNF name as introduced in OPENMANO DB
      # vnf_id:    519f03ee-8ab6-11e4-ab4c-52540056c317   # Optionally, instead of the VNF name, the VNF id in Openmano DB can be used
    vnf2:
      type:      VNF
      VNF model: vnf_model2
      # Optional information for display in the openmano-gui: graphical position of the node and its interfaces
      graph:     {"y":399,"x":632,"ifaces":{"left":[["xe0","d"],["xe1","d"]],"bottom":[["eth0","v"],["eth1","m"]]}}
    bridge1:                  # Bridge networks must be declared in this section if we want to interconnect VNFs using a Linux bridge
      type:      network
      model:     bridge_net   # 'bridge_net' or 'dataplane_net' for 'network' type
    default:                  # External networks (datacenter nets) must be declared in this section if we want to interconnect VNFs to them
      type:      external_network
      model:     default      # datacenter net name, as introduced in OPENMANO DB
  connections:                # In this section, connections between VNFs and networks are explicited
    datanet:                  # name
      # Data plane connections do not need to include a bridge since they are built through the Openflow Controller
      nodes:                  # nodes that will be connected: one or several vnfs, and optionally one additional network declared in nodes section
      -  vnf1: xe0            # First node and its interface to be connected (interfaces must match to one in the VNF descriptor)
      -  vnf2: xe0            # Second node and its interface
    control net:
      # Control plane connections must include a bridge network in the list of nodes
      nodes:
      -   bridge1: null       # Bridge networks must be included if we want to interconnect the nodes to that network
      -   vnf1: eth1
      -   vnf2: eth1
    external net:
      # Connections based on external networks (datacenter nets) must include the external network in the list of nodes
      nodes:
      -   default: null       # Datacenter networks (external networks) must be included if we want to interconnect the nodes to that network
      -   vnf1: eth0
      -   vnf1: eth0

