# 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.

# curl -H "xos-username: admin@opencord.org" -H "xos-password: letmein" -X POST --data-binary @onf-mcord-pod1-fabric.yaml http://10.90.0.131: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/deployment.yaml
  - custom_types/sitedeployment.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

    myDeployment:
      type: tosca.nodes.Deployment
      properties:
        name: mydeployment

    site_deployment:
      type: tosca.nodes.SiteDeployment
      requirements:
        - site:
            node: mySite
            relationship: tosca.relationships.BelongsToOne
        - deployment:
            node: myDeployment
            relationship: tosca.relationships.BelongsToOne

    # compute nodes
    node#node1:
        type: tosca.nodes.Node
        properties:
            dataPlaneIntf: eth2
            dataPlaneIp: 118.0.0.201
            name: node1
        requirements:
            - site_deployment:
                node: site_deployment
                relationship: tosca.relationships.BelongsToOne

    node#node2:
        type: tosca.nodes.Node
        properties:
            dataPlaneIntf: eth2
            dataPlaneIp: 118.0.0.202
            name: node2
        requirements:
            - site_deployment:
                node: site_deployment
                relationship: tosca.relationships.BelongsToOne

    node#node3:
        type: tosca.nodes.Node
        properties:
            dataPlaneIntf: eth2
            dataPlaneIp: 118.0.0.203
            name: node3
        requirements:
            - site_deployment:
                node: site_deployment
                relationship: tosca.relationships.BelongsToOne
    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: 33
      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_ip_1:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 13.1.1.0/24
        description: node_1_ip_1
      requirements:
        - interface:
            node: interface#port_1_interface
            relationship: tosca.relationships.BelongsToOne

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

    ip#port_1_ip_3:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 116.0.0.254/24
        description: node_1_ip_3
      requirements:
        - interface:
            node: interface#port_1_interface
            relationship: tosca.relationships.BelongsToOne

    # Node2 Port
    port#node_2_port:
      type: tosca.nodes.SwitchPort
      properties:
        portId: 34
      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_ip_1:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 13.1.1.0/24
        description: node_2_ip_1
      requirements:
        - interface:
            node: interface#port_2_interface
            relationship: tosca.relationships.BelongsToOne

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

    ip#port_2_ip_3:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 116.0.0.254/24
        description: node_2_ip_3
      requirements:
        - interface:
            node: interface#port_2_interface
            relationship: tosca.relationships.BelongsToOne

    # Node3 Port
    port#node_3_port:
      type: tosca.nodes.SwitchPort
      properties:
        portId: 35
      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_ip_1:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 13.1.1.0/24
        description: node_3_ip_1
      requirements:
        - interface:
            node: interface#port_3_interface
            relationship: tosca.relationships.BelongsToOne

    ip#port_3_ip_2:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 119.0.0.254/24
        description: node_3_ip_2
      requirements:
        - interface:
            node: interface#port_3_interface
            relationship: tosca.relationships.BelongsToOne

    ip#port_3_ip_3:
      type: tosca.nodes.FabricIpAddress
      properties:
        ip: 116.0.0.254/24
        description: node_3_ip_2
      requirements:
        - interface:
            node: interface#port_3_interface
            relationship: tosca.relationships.BelongsToOne
