
# 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

imports:
   - custom_types/xos.yaml
   - custom_types/vnaas.yaml

description: vnaasglobal services, generated by platform-install

topology_template:
  node_templates:

    enterpriselocation#onlab:
      type: tosca.nodes.EnterpriseLocation
      requirements:
      properties:
        name: onlab
        cord_site_ip: 127.0.0.1
        cord_site_port: 8181
        cord_site_username: onos
        cord_site_password: rocks
        cord_site_type: onos


    enterpriselocation#onlab1:
      type: tosca.nodes.EnterpriseLocation
      requirements:
      properties:
        name: onlab1
        cord_site_ip: 127.0.0.2
        cord_site_port: 8181
        cord_site_username: onos
        cord_site_password: rocks
        cord_site_type: onos

    onosmodel#onlab:
      type: tosca.nodes.OnosModel
      requirements:
      properties:
        name: onlabT
        onos_ip: onos-cord
        onos_port: 8182
        onos_username: onos
        onos_password: rocks
        onos_type: global

    bandwidthprofile#bronze:
      type: tosca.nodes.BandwidthProfile
      requirements:
      properties:
        cbs: 1000
        ebs: 1200
        cir: 1000000
        eir: 1200000
        name: bronze

    bandwidthprofile#silver:
      type: tosca.nodes.BandwidthProfile
      requirements:
      properties:
        cbs: 1500
        ebs: 2000
        cir: 1500000
        eir: 2000000
        name: silver

    bandwidthprofile#gold:
      type: tosca.nodes.BandwidthProfile
      requirements:
      properties:
        cbs: 2000
        ebs: 2700
        cir: 2000000
        eir: 2700000
        name: gold

    bandwidthprofile#platinum:
      type: tosca.nodes.BandwidthProfile
      requirements:
      properties:
        cbs: 2500
        ebs: 3200
        cir: 2500000
        eir: 3200000
        name: platinum

    usernetworkinterface#UserNetworkInterface1:
      type: tosca.nodes.UserNetworkInterface
      requirements:
      properties:
        tenant: onlab
        name: uni1
        latlng: [37.973535, -122.531087]
        cpe_id: netconf:192.168.56.10:830/0

    usernetworkinterface#UserNetworkInterface2:
      type: tosca.nodes.UserNetworkInterface
      requirements:
      properties:
        tenant: onlab
        name: uni2
        latlng: [37.773972, -122.431297]
        cpe_id: netconf:192.168.56.20:830/0

    usernetworkinterface#UserNetworkInterface3:
      type: tosca.nodes.UserNetworkInterface
      requirements:
      properties:
        tenant: onlab
        name: uni3
        latlng: [37.871637, -122.259750]
        cpe_id: netconf:192.168.56.30:830/0
