
{#
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: created by platform-install, need to add M-CORD services later

imports:
   - custom_types/xos.yaml
   - custom_types/slice.yaml
   - custom_types/site.yaml
   - custom_types/image.yaml
   - custom_types/flavor.yaml
   - custom_types/network.yaml
   - custom_types/onosservice.yaml
   - custom_types/networkslice.yaml
   - custom_types/venbservice.yaml
   - custom_types/venbserviceinstance.yaml
   - custom_types/vspgwcservice.yaml
   - custom_types/vspgwcvendor.yaml
   - custom_types/vspgwctenant.yaml
   - custom_types/vspgwuservice.yaml
   - custom_types/vspgwuvendor.yaml
   - custom_types/vspgwutenant.yaml

topology_template:
  node_templates:

# site, image, fully created in deployment.yaml
    {{ site_name }}:
      type: tosca.nodes.Site
      properties:
        must-exist: true
        name: {{ site_name }}

    m1.small:
      type: tosca.nodes.Flavor
      properties:
        name: m1.small
        must-exist: true
    m1.large:
      type: tosca.nodes.Flavor
      properties:
        name: m1.large
        must-exist: true
    m1.medium:
      type: tosca.nodes.Flavor
      properties:
        name: m1.medium
        must-exist: true
    m1.xlarge:
      type: tosca.nodes.Flavor
      properties:
        name: m1.xlarge
        must-exist: true

    image-venb:
      type: tosca.nodes.Image
      properties:
        name: image-venb

    image-spgwc:
      type: tosca.nodes.Image
      properties:
        name: image-spgwc

    image-spgwu:
      type: tosca.nodes.Image
      properties:
        name: image-spgwu

# management networks, fully created in management-net.yaml
    management:
      type: tosca.nodes.Network
      properties:
        must-exist: true
        name: management

{% if use_management_hosts %}
    management_hosts:
      type: tosca.nodes.Network
      properties:
        must-exist: true
        name: management_hosts
{% endif %}

# s1u_network is for connectivity between VMs, fully created in s1u-net.yaml
    s1u_network:
      type: tosca.nodes.Network
      properties:
        must-exist: true
        name: s1u_network
# s11_network is for connectivity between VMs, fully created in s11-net.yaml
    s11_network:
      type: tosca.nodes.Network
      properties:
        must-exist: true
        name: s11_network
# nbi_network is for connectivity between VMs, fully created in nbi-net.yaml
    nbi_network:
      type: tosca.nodes.Network
      properties:
        must-exist: true
        name: nbi_network
# sbi_network is for connectivity between VMs, fully created in sbi-net.yaml
    sbi_network:
      type: tosca.nodes.Network
      properties:
        must-exist: true
        name: sbi_network
# sgi_network is for connectivity between VMs, fully created in sgi-net.yaml
    sgi_network:
      type: tosca.nodes.Network
      properties:
        must-exist: true
        name: sgi_network
# spgw_network is for connectivity between VMs, fully created in spgw-net.yaml
    spgw_network:
      type: tosca.nodes.Network
      properties:
        must-exist: true
        name: spgw_network
# flat_network is for connectivity between VM inside cord and server outside, fully created in flat-net.yaml
    flat_network:
      type: tosca.nodes.Network
      properties:
        must-exist: true
        name: flat_network

# ONOS_CORD, fully created in vtn.yaml
    service#ONOS_CORD:
      type: tosca.nodes.ONOSService
      properties:
        must-exist: true
        name: ONOS_CORD

# ONOS_Fabric, fully created in fabric.yaml
    service#ONOS_Fabric:
      type: tosca.nodes.ONOSService
      properties:
        must-exist: true
        name: ONOS_Fabric

# vENB Service
    service#venb:
      type: tosca.nodes.VENBService
      properties:
          name: venb
          kind: vEPC
          public_key: {{ lookup('file', config_cord_profile_dir + '/key_import/mcord_rsa.pub') }}
          private_key_fn: /opt/xos/services/venb/keys/mcord_rsa
      artifacts:
          pubkey: /opt/cord_profile/key_import/mcord_rsa.pub

    {{ site_name }}_venb:
      description: vENB Service Slice
      type: tosca.nodes.Slice
      properties:
          name: {{ site_name }}_venb
          default_isolation: vm
          network: noauto
      requirements:
          - site:
              node: mysite
              relationship: tosca.relationships.BelongsToOne
          - service:
              node: service#venb
              relationship: tosca.relationships.BelongsToOne
          - default_image:
              node: image-venb
              relationship: tosca.relationships.BelongsToOne
          - default_flavor:
              node: m1.xlarge
              relationship: tosca.relationships.BelongsToOne

    venb_instance1:
      type: tosca.nodes.VENBServiceInstance
      properties:
        name: venb_instance1
      requirements:
        - owner:
            node: service#venb
            relationship: tosca.relationships.BelongsToOne

    venb_slice_management_network:
      type: tosca.nodes.NetworkSlice
      requirements:
        - network:
            node: management
            relationship: tosca.relationships.BelongsToOne
        - slice:
            node: {{ site_name }}_venb
            relationship: tosca.relationships.BelongsToOne

    venb_slice_s11_network:
      type: tosca.nodes.NetworkSlice
      requirements:
        - network:
            node: s11_network
            relationship: tosca.relationships.BelongsToOne
        - slice:
            node: {{ site_name }}_venb
            relationship: tosca.relationships.BelongsToOne

    venb_slice_s1u_network:
      type: tosca.nodes.NetworkSlice
      requirements:
        - network:
            node: s1u_network
            relationship: tosca.relationships.BelongsToOne
        - slice:
            node: {{ site_name }}_venb
            relationship: tosca.relationships.BelongsToOne

    venb_slice_sgi_network:
      type: tosca.nodes.NetworkSlice
      requirements:
        - network:
            node: sgi_network
            relationship: tosca.relationships.BelongsToOne
        - slice:
            node: {{ site_name }}_venb
            relationship: tosca.relationships.BelongsToOne

    venb_slice_flat_network:
      type: tosca.nodes.NetworkSlice
      requirements:
        - network:
            node: flat_network
            relationship: tosca.relationships.BelongsToOne
        - slice:
            node: {{ site_name }}_venb
            relationship: tosca.relationships.BelongsToOne

#vSPGWC Service
    service#vspgwc:
      type: tosca.nodes.VSPGWCService
      properties:
          name: vspgwc
          public_key: {{ lookup('file', config_cord_profile_dir + '/key_import/mcord_rsa.pub') }}
          private_key_fn: /opt/xos/services/vspgwc/keys/mcord_rsa
      artifacts:
          pubkey: /opt/cord_profile/key_import/mcord_rsa.pub

    {{ site_name }}_vspgwc:
      description: SDN controller slice
      type: tosca.nodes.Slice
      properties:
          name: {{ site_name }}_vspgwc
          default_isolation: vm
          network: noauto
      requirements:
          - site:
              node: mysite
              relationship: tosca.relationships.BelongsToOne
          - service:
              node: service#vspgwc
              relationship: tosca.relationships.BelongsToOne
          - default_image:
              node: image-spgwc
              relationship: tosca.relationships.BelongsToOne
          - default_flavor:
              node: m1.large
              relationship: tosca.relationships.BelongsToOne

    intel_vspgwc:
      type: tosca.nodes.VSPGWCVendor
      properties:
        name: intel_vspgwc
      requirements:
        - image:
            node: image-spgwc
            relationship: tosca.relationships.BelongsToOne
        - flavor:
            node: m1.large
            relationship: tosca.relationships.BelongsToOne

    serviceinstance#vspgwc_instance:
      type: tosca.nodes.VSPGWCTenant
      properties:
          name: vspgwc_instance1
      requirements:
        - vspgwc_vendor:
            node: intel_vspgwc
            relationship: tosca.relationships.BelongsToOne
        - owner:
            node: service#vspgwc
            relationship: tosca.relationships.BelongsToOne

    vspgwc_slice_management_network:
      type: tosca.nodes.NetworkSlice
      requirements:
        - network:
            node: management
            relationship: tosca.relationships.BelongsToOne
        - slice:
            node: {{ site_name }}_vspgwc
            relationship: tosca.relationships.BelongsToOne

    vspgwc_slice_s11_network:
      type: tosca.nodes.NetworkSlice
      requirements:
        - network:
            node: s11_network
            relationship: tosca.relationships.BelongsToOne
        - slice:
            node: {{ site_name }}_vspgwc
            relationship: tosca.relationships.BelongsToOne

    vspgwc_slice_spgw_network:
      type: tosca.nodes.NetworkSlice
      requirements:
        - network:
            node: spgw_network
            relationship: tosca.relationships.BelongsToOne
        - slice:
            node: {{ site_name }}_vspgwc
            relationship: tosca.relationships.BelongsToOne

#vSPGWU Service
    service#vspgwu:
      type: tosca.nodes.VSPGWUService
      properties:
          name: vspgwu
          public_key: {{ lookup('file', config_cord_profile_dir + '/key_import/mcord_rsa.pub') }}
          private_key_fn: /opt/xos/services/vspgwu/keys/mcord_rsa
      artifacts:
          pubkey: /opt/cord_profile/key_import/mcord_rsa.pub

    {{ site_name }}_vspgwu:
      description: SDN controller slice
      type: tosca.nodes.Slice
      properties:
          name: {{ site_name }}_vspgwu
          default_isolation: vm
          network: noauto
      requirements:
          - site:
              node: mysite
              relationship: tosca.relationships.BelongsToOne
          - service:
              node: service#vspgwu
              relationship: tosca.relationships.BelongsToOne
          - default_image:
              node: image-spgwu
              relationship: tosca.relationships.BelongsToOne
          - default_flavor:
              node: m1.xlarge
              relationship: tosca.relationships.BelongsToOne

    intel_vspgwu:
      type: tosca.nodes.VSPGWUVendor
      properties:
        name: intel_vspgwu
      requirements:
        - image:
            node: image-spgwu
            relationship: tosca.relationships.BelongsToOne
        - flavor:
            node: m1.xlarge
            relationship: tosca.relationships.BelongsToOne

    serviceinstance#vspgwu_instance:
      type: tosca.nodes.VSPGWUTenant
      properties:
          name: vspgwu_instance1
      requirements:
        - vspgwu_vendor:
            node: intel_vspgwu
            relationship: tosca.relationships.BelongsToOne
        - owner:
            node: service#vspgwu
            relationship: tosca.relationships.BelongsToOne

    vspgwu_slice_management_network:
      type: tosca.nodes.NetworkSlice
      requirements:
        - network:
            node: management
            relationship: tosca.relationships.BelongsToOne
        - slice:
            node: {{ site_name }}_vspgwu
            relationship: tosca.relationships.BelongsToOne

    vspgwu_slice_sgi_network:
      type: tosca.nodes.NetworkSlice
      requirements:
        - network:
            node: sgi_network
            relationship: tosca.relationships.BelongsToOne
        - slice:
            node: {{ site_name }}_vspgwu
            relationship: tosca.relationships.BelongsToOne

    vspgwu_slice_spgw_network:
      type: tosca.nodes.NetworkSlice
      requirements:
        - network:
            node: spgw_network
            relationship: tosca.relationships.BelongsToOne
        - slice:
            node: {{ site_name }}_vspgwu
            relationship: tosca.relationships.BelongsToOne

    vspgwu_slice_s1u_network:
      type: tosca.nodes.NetworkSlice
      requirements:
        - network:
            node: s1u_network
            relationship: tosca.relationships.BelongsToOne
        - slice:
            node: {{ site_name }}_vspgwu
            relationship: tosca.relationships.BelongsToOne
