
# Copyright 2017-present Open Networking Foundation
#
# 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.


tosca_definitions_version: tosca_simple_yaml_1_0

description: Some basic fixtures

imports:
  - custom_types/deploymentrole.yaml
  - custom_types/flavor.yaml
  - custom_types/siterole.yaml
  - custom_types/slicerole.yaml
  - custom_types/networkparametertype.yaml
  - custom_types/networktemplate.yaml
  - custom_types/xos.yaml

topology_template:
  node_templates:

    xos:
      type: tosca.nodes.XOS
      properties:
        name: xos

# -----------------------------------------------------------------------------
# Network Parameter Types
# -----------------------------------------------------------------------------

    s_tag:
      type: tosca.nodes.NetworkParameterType
      properties:
        name: s_tag
    c_tag:
      type: tosca.nodes.NetworkParameterType
      properties:
        name: c_tag

    next_hop:
      type: tosca.nodes.NetworkParameterType
      properties:
        name: next_hop

    device:
      type: tosca.nodes.NetworkParameterType
      properties:
        name: device

    bridge:
      type: tosca.nodes.NetworkParameterType
      properties:
        name: bridge

    neutron_port_name:
      type: tosca.nodes.NetworkParameterType
      properties:
        name: neutron_port_name

# ----------------------------------------------------------------------------
# Roles
# ----------------------------------------------------------------------------

    siterole#admin:
      type: tosca.nodes.SiteRole
      properties:
        role: admin

    siterole#pi:
      type: tosca.nodes.SiteRole
      properties:
        role: pi

    siterole#tech:
      type: tosca.nodes.SiteRole
      properties:
        role: tech

    deploymentrole#admin:
      type: tosca.nodes.DeploymentRole
      properties:
        role: admin

    slicerole#admin:
      type: tosca.nodes.SliceRole
      properties:
        role: admin

    slicerole#access:
      type: tosca.nodes.SliceRole
      properties:
        role: access

# -----------------------------------------------------------------------------
# Flavors
# -----------------------------------------------------------------------------

    m1.small:
      type: tosca.nodes.Flavor
      properties:
        name: m1.small

    m1.medium:
      type: tosca.nodes.Flavor
      properties:
        name: m1.medium

    m1.large:
      type: tosca.nodes.Flavor
      properties:
        name: m1.large

    m1.xlarge:
      type: tosca.nodes.Flavor
      properties:
        name: m1.xlarge

# -----------------------------------------------------------------------------
# Network Templates
# -----------------------------------------------------------------------------

    Private:
      type: tosca.nodes.NetworkTemplate
      properties:
        name: Private
        visibility: private
        translation: none

    Public shared IPv4:
      type: tosca.nodes.NetworkTemplate
      properties:
        name: Public shared IPv4
        visibility: private
        translation: NAT
        shared_network_name: nat-net

    Public dedicated IPv4:
      type: tosca.nodes.NetworkTemplate
      properties:
        name: Public dedicated IPv4
        visibility: public
        translation: none
        shared_network_name: ext-net

