# Copyright 2017-2023 Open Networking Foundation (ONF) and the ONF Contributors
#
# 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.

# curl -H "xos-username: admin@opencord.org" -H "xos-password: letmein" -X POST --data-binary @mcord-barcelona-fabric.yaml http://192.168.69.1:30007/run

tosca_definitions_version: tosca_simple_yaml_1_0
imports:
  - custom_types/switch.yaml
  - custom_types/switchport.yaml
  - custom_types/portinterface.yaml
  - custom_types/fabricipaddress.yaml
  - custom_types/site.yaml
  - custom_types/node.yaml
  - custom_types/vrouterservice.yaml
  - custom_types/vrouterserviceinstance.yaml

description: Configures the ONF SEBA POD with AT&T workflow

topology_template:
  node_templates:

    # Site deployment
    mySite:
      type: tosca.nodes.Site
      properties:
        name: mysite
        login_base: opencord
        abbreviated_name: ms
        site_url: http://opencord.org/
        hosts_nodes: true

    # compute nodes
    node#node1:
      type: tosca.nodes.Node
      properties:
        dataPlaneIntf: eth2
        dataPlaneIp: 118.0.0.201
        name: node1

    node#node2:
        type: tosca.nodes.Node
        properties:
          dataPlaneIntf: eth2
          dataPlaneIp: 118.0.0.202
          name: node2

    # static routes
    service#vrouter:
      type: tosca.nodes.VRouterService
      properties:
        name: vrouter
        must-exist: true

    vroutersi#calico:
      type: tosca.nodes.VRouterServiceInstance
      properties:
        name: calico
      requirements:
        - owner:
            node: service#vrouter
            relationship: tosca.relationships.BelongsToOne

    # Fabric configuration
    switch#leaf_1:
      type: tosca.nodes.Switch
      properties:
        driver: ofdpa3
        ipv4Loopback: 192.168.0.204
        ipv4NodeSid: 214
        isEdgeRouter: true
        name: Agg Switch
        ofId: of:0000000000000001
        routerMac: 54:87:de:ad:be:ef

    # Node1 Port
    port#node_1_port:
      type: tosca.nodes.SwitchPort
      properties:
        portId: 34
      requirements:
        - switch:
            node: switch#leaf_1
            relationship: tosca.relationships.BelongsToOne

    interface#port_1_interface:
      type: tosca.nodes.PortInterface
      properties:
        vlanUntagged: 20
        name: node_1
      requirements:
        - port:
            node: port#node_1_port
            relationship: tosca.relationships.BelongsToOne

    ip#port_1_sgi_net:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 13.1.1.254/24
        description: node_1_sgi_net
      requirements:
        - interface:
            node: interface#port_1_interface
            relationship: tosca.relationships.BelongsToOne

    ip#port_1_s1u_net:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 119.0.0.254/24
        description: node_1_s1u_net
      requirements:
        - interface:
            node: interface#port_1_interface
            relationship: tosca.relationships.BelongsToOne

    # Node2 Port
    port#node_2_port:
      type: tosca.nodes.SwitchPort
      properties:
        portId: 35
      requirements:
        - switch:
            node: switch#leaf_1
            relationship: tosca.relationships.BelongsToOne

    interface#port_2_interface:
      type: tosca.nodes.PortInterface
      properties:
        vlanUntagged: 20
        name: node_2
      requirements:
        - port:
            node: port#node_2_port
            relationship: tosca.relationships.BelongsToOne

    ip#port_2_sgi_net:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 13.1.1.254/24
        description: node_2_sgi_net
      requirements:
        - interface:
            node: interface#port_2_interface
            relationship: tosca.relationships.BelongsToOne

    ip#port_2_s1u_net:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 119.0.0.254/24
        description: node_2_s1u_net
      requirements:
        - interface:
            node: interface#port_2_interface
            relationship: tosca.relationships.BelongsToOne

    # Upstream Router Port
    port#node_ext_port:
      type: tosca.nodes.SwitchPort
      properties:
        portId: 40
      requirements:
        - switch:
            node: switch#leaf_1
            relationship: tosca.relationships.BelongsToOne

    interface#port_ext_interface:
      type: tosca.nodes.PortInterface
      properties:
        vlanUntagged: 20
        name: ext
      requirements:
        - port:
            node: port#node_ext_port
            relationship: tosca.relationships.BelongsToOne

    ip#port_ext_upstream:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 11.0.0.254/24
        description: node_ext_upstream
      requirements:
        - interface:
            node: interface#port_ext_interface
            relationship: tosca.relationships.BelongsToOne
