
{#
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, created by platform-install

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

topology_template:
  node_templates:

# site, image, fully created in deployment.yaml
    {{ site_name }}:
      type: tosca.nodes.Site

    image#vsg-1.1:
      type: tosca.nodes.Image

# management networks, fully created in management-net.yaml
    management:
      type: tosca.nodes.network.Network.XOS
      properties:
        no-create: true
        no-delete: true
        no-update: true

{% if use_management_hosts %}
    management_hosts:
      type: tosca.nodes.network.Network.XOS
      properties:
        no-create: true
        no-delete: true
        no-update: true
{% endif %}

    service#rcord:
      type: tosca.nodes.Service

# ONOS_CORD, fully created in vtn.yaml
    service#ONOS_CORD:
      type: tosca.nodes.ONOSService
      properties:
        no-delete: true
        no-create: true
        no-update: true

# ONOS_Fabric, fully created in fabric.yaml
    service#ONOS_Fabric:
      type: tosca.nodes.ONOSService
      properties:
        no-delete: true
        no-create: true
        no-update: true

# CORD Services
    service#vtr:
      type: tosca.nodes.VTRService
      properties:
        view_url: /admin/vtr/vtrservice/$id$/
        kind: vTR
        replaces: service_vtr

    service#volt:
      type: tosca.nodes.VOLTService
      requirements:
        - vsg_tenant:
            node: service#vsg
            relationship: tosca.relationships.TenantOfService
      properties:
        view_url: /admin/volt/voltservice/$id$/
        kind: vOLT
        replaces: service_volt
        public_key: { get_artifact: [ SELF, pubkey, LOCAL_FILE] }
        private_key_fn: /opt/xos/services/volt/keys/volt_rsa
      artifacts:
        pubkey: /opt/cord_profile/key_import/volt_rsa.pub

    addresses_vsg:
      type: tosca.nodes.AddressPool
      properties:
        addresses: 10.6.1.128/26
        gateway_ip: 10.6.1.129
        gateway_mac: 02:42:0a:06:01:01

    addresses_public:
      type: tosca.nodes.AddressPool
      properties:
        addresses: 10.6.1.192/26
        gateway_ip: 10.6.1.193
        gateway_mac: 02:42:0a:06:01:01

    label_vsg:
      type: tosca.nodes.NodeLabel

    service#vsg:
      type: tosca.nodes.VSGService
      requirements:
        - vrouter_tenant:
            node: service#vrouter
            relationship: tosca.relationships.TenantOfService
      properties:
        view_url: /admin/vsg/vsgservice/$id$/
        backend_network_label: hpc_client
        public_key: { get_artifact: [ SELF, pubkey, LOCAL_FILE] }
        private_key_fn: /opt/xos/services/vsg/keys/vsg_rsa
#       node_label: label_vsg
        replaces: service_vsg
      artifacts:
        pubkey: /opt/cord_profile/key_import/vsg_rsa.pub

    service#vrouter:
      type: tosca.nodes.VRouterService
      properties:
        view_url: /admin/vrouter/vrouterservice/$id$/
        replaces: service_vrouter
      requirements:
        - addresses_vsg:
            node: addresses_vsg
            relationship: tosca.relationships.ProvidesAddresses
        - addresses_public:
            node: addresses_public
            relationship: tosca.relationships.ProvidesAddresses

    vRouter_ONOS_app:
      type: tosca.nodes.ONOSvRouterApp
      requirements:
        - onos_tenant:
            node: service#ONOS_Fabric
            relationship: tosca.relationships.TenantOfService
        - vrouter_service:
            node: service#vrouter
            relationship: tosca.relationships.UsedByService
      properties:
        dependencies: org.onosproject.fpm
        autogenerate: vrouter-network-cfg

    template#vsg:
      type: tosca.nodes.NetworkTemplate
      properties:
        visibility: private
        translation: none
        vtn_kind: VSG

    # Networks required by the CORD setup
    {{ site_name }}_vsg-access:
      type: tosca.nodes.network.Network
      properties:
        ip_version: 4
      requirements:
        - network_template:
            node: template#vsg
            relationship: tosca.relationships.UsesNetworkTemplate
        - owner:
            node: {{ site_name }}_vsg
            relationship: tosca.relationships.MemberOfSlice
        - connection:
            node: {{ site_name }}_vsg
            relationship: tosca.relationships.ConnectsToSlice

    # CORD Slices
    {{ site_name }}_vsg:
      description: vSG Controller Slice
      type: tosca.nodes.Slice
      properties:
        network: noauto
      requirements:
        - vsg_service:
            node: service#vsg
            relationship: tosca.relationships.MemberOfService
        - site:
            node: {{ site_name }}
            relationship: tosca.relationships.MemberOfSite
        - management:
            node: management
            relationship: tosca.relationships.ConnectsToNetwork
{% if use_management_hosts %}
        - management_hosts:
            node: management_hosts
            relationship: tosca.relationships.ConnectsToNetwork
{% endif %}
        - image:
            node: image#vsg-1.1
            relationship: tosca.relationships.DefaultImage

    in#lanside:
      type: tosca.nodes.InterfaceType
      properties:
         direction: in

    out#lanside:
      type: tosca.nodes.InterfaceType
      properties:
         direction: out

    in#wanside:
      type: tosca.nodes.InterfaceType
      properties:
         direction: in

    out#wanside:
      type: tosca.nodes.InterfaceType
      properties:
         direction: out

    volt_lanside:
      type: tosca.nodes.ServiceInterface
      requirements:
        - service:
            node: service#volt
            relationship: tosca.relationships.MemberOfService
        - interface:
            node: out#lanside
            relationship: tosca.relationships.IsType

    vsg_lanside:
      type: tosca.nodes.ServiceInterface
      requirements:
        - service:
            node: service#vsg
            relationship: tosca.relationships.MemberOfService
        - interface:
            node: in#lanside
            relationship: tosca.relationships.IsType

    vsg_wanside:
      type: tosca.nodes.ServiceInterface
      requirements:
        - service:
            node: service#vsg
            relationship: tosca.relationships.MemberOfService
        - interface:
            node: out#wanside
            relationship: tosca.relationships.IsType

    vrouter_wanside:
      type: tosca.nodes.ServiceInterface
      requirements:
        - service:
            node: service#vrouter
            relationship: tosca.relationships.MemberOfService
        - interface:
            node: in#wanside
            relationship: tosca.relationships.IsType