
# 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: Just enough Tosca to get the vSG slice running on the CORD POD

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

topology_template:
  node_templates:

    service#vRouterSample:
      type: tosca.nodes.VRouterService
      properties:
          view_url: /admin/vrouter/vrouterservice/$id$/
          rest_hostname: 10.0.2.2
          rest_port: 8181
          rest_user: onos
          rest_pass: rocks
    
    device#switch:
      type: tosca.nodes.VRouterDevice
      properties:
        openflow_id: of:000000000001
        driver: softrouter
        # config_key: basic
      requirements:
        - service#vRouterSample:
            node: service#vRouterSample
            relationship: tosca.relationships.MemberOfService

    port#sample_port:
      type: tosca.nodes.VRouterPort
      properties:
        openflow_id: of:000000000001/1
      requirements:
        - device#switch:
            node: device#switch
            relationship: tosca.relationships.PortOfDevice
        - service#vRouterSample:
            node: service#vRouterSample
            relationship: tosca.relationships.MemberOfService

    interface#b1-1:
      type: tosca.nodes.VRouterInterface
      properties:
        name: b1-1
        mac: 00:00:00:00:00:01
        vlan: 100
      requirements:
        - port#sample_port:
            node: port#sample_port
            relationship: tosca.relationships.InterfaceOfPort

    vrouter_ips:
      type: tosca.nodes.VRouterIp
      properties:
        ip: 10.0.4.2/24
      requirements:
        - interface#b1-1:
            node: interface#b1-1
            relationship: tosca.relationships.IpOfInterface

    app#vrouterApp:
      type: tosca.nodes.VRouterApp
      properties:
        name: org.onosproject.router
        # can we use a relation to specify the connect point port?
        control_plane_connect_point: of:00000000000000b1/5
        ospf_enabled: true
      requirements:
          - service#vRouterSample:
              node: service#vRouterSample
              relationship: tosca.relationships.MemberOfService
