# 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 @aether-production-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 Aether Production Fabric

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: 192.168.251.20
        name: node1

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

    node#node3:
      type: tosca.nodes.Node
      properties:
        dataPlaneIntf: eth2
        dataPlaneIp: 192.168.251.22
        name: node3

    # 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: 37
      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: 192.168.250.0/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: 192.168.252.0/24
        description: node_1_s1u_net
      requirements:
        - interface:
            node: interface#port_1_interface
            relationship: tosca.relationships.BelongsToOne

    ip#port_1_rru_net:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 192.168.251.0/24
        description: node_1_rru_net
      requirements:
        - interface:
            node: interface#port_1_interface
            relationship: tosca.relationships.BelongsToOne

    # Node2 Port
    port#node_2_port:
      type: tosca.nodes.SwitchPort
      properties:
        portId: 40
      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: 192.168.250.0/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: 192.168.252.0/24
        description: node_2_s1u_net
      requirements:
        - interface:
            node: interface#port_2_interface
            relationship: tosca.relationships.BelongsToOne

    ip#port_2_rru_net:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 192.168.251.0/24
        description: node_2_rru_net
      requirements:
        - interface:
            node: interface#port_2_interface
            relationship: tosca.relationships.BelongsToOne

    # Node3 Port
    port#node_3_port:
      type: tosca.nodes.SwitchPort
      properties:
        portId: 38
      requirements:
        - switch:
            node: switch#leaf_1
            relationship: tosca.relationships.BelongsToOne

    interface#port_3_interface:
      type: tosca.nodes.PortInterface
      properties:
        vlanUntagged: 20
        name: node_3
      requirements:
        - port:
            node: port#node_3_port
            relationship: tosca.relationships.BelongsToOne

    ip#port_3_sgi_net:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 192.168.250.0/24
        description: node_3_sgi_net
      requirements:
        - interface:
            node: interface#port_3_interface
            relationship: tosca.relationships.BelongsToOne

    ip#port_3_s1u_net:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 192.168.252.0/24
        description: node_3_s1u_net
      requirements:
        - interface:
            node: interface#port_3_interface
            relationship: tosca.relationships.BelongsToOne

    ip#port_3_rru_net:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 192.168.0.251/24
        description: node_3_rru_net
      requirements:
        - interface:
            node: interface#port_3_interface
            relationship: tosca.relationships.BelongsToOne

    # RRU Port
    port#rru_port:
      type: tosca.nodes.SwitchPort
      properties:
        portId: 39
      requirements:
        - switch:
            node: switch#leaf_1
            relationship: tosca.relationships.BelongsToOne

    interface#rru_interface:
      type: tosca.nodes.PortInterface
      properties:
        vlanUntagged: 20
        name: rru
      requirements:
        - port:
            node: port#rru_port
            relationship: tosca.relationships.BelongsToOne

    ip#port_rru_sgi_net:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 192.168.250.0/24
        description: rru_sgi_net
      requirements:
        - interface:
            node: interface#rru_interface
            relationship: tosca.relationships.BelongsToOne

    ip#port_rru_s1u_net:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 192.168.252.0/24
        description: rru_s1u_net
      requirements:
        - interface:
            node: interface#rru_interface
            relationship: tosca.relationships.BelongsToOne

    ip#port_rru_net:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 192.168.251.0/24
        description: rru_net
      requirements:
        - interface:
            node: interface#rru_interface
            relationship: tosca.relationships.BelongsToOne
