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

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/vspgwcservice.yaml
   - custom_types/vspgwcvendor.yaml
   - custom_types/vspgwuservice.yaml
   - custom_types/vspgwuvendor.yaml
   - custom_types/vmmeservice.yaml
   - custom_types/vmmevendor.yaml
   - custom_types/vepcservice.yaml
   - custom_types/servicedependency.yaml
   - custom_types/mcordsubscriberservice.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-test:
      type: tosca.nodes.Image
      properties:
        name: image-test

    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 %}

# flat_network_s1mme is for connectivity between VMs, fully created in flat-net-s1mme.yaml
    flat_network_s1mme:
      type: tosca.nodes.Network
      properties:
        must-exist: true
        name: flat_network_s1mme
# flat_network_s1u is for connectivity between VMs, fully created in flat-net-s1u.yaml
    flat_network_s1u:
      type: tosca.nodes.Network
      properties:
        must-exist: true
        name: flat_network_s1u
# 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
# 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

# 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

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

    {{ site_name }}_vmme:
      description: vMME Service Slice
      type: tosca.nodes.Slice
      properties:
          name: {{ site_name }}_vmme
          default_isolation: vm
          network: noauto
      requirements:
          - site:
              node: mysite
              relationship: tosca.relationships.BelongsToOne
          - service:
              node: service#vmme
              relationship: tosca.relationships.BelongsToOne
          - default_image:
              node: image-test
              relationship: tosca.relationships.BelongsToOne
          - default_flavor:
              node: m1.medium
              relationship: tosca.relationships.BelongsToOne

    sprint_mme:
      type: tosca.nodes.VMMEVendor
      properties:
        name: sprint_mme
      requirements:
        - image:
            node: image-test
            relationship: tosca.relationships.BelongsToOne
        - flavor:
            node: m1.medium
            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


#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

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

# ServiceDependencies
    vmme_vspgwc:
      type: tosca.nodes.ServiceDependency
      properties:
        connect_method: None
      requirements:
        - subscriber_service:
            node: service#vmme
            relationship: tosca.relationships.BelongsToOne
        - provider_service:
            node: service#vspgwc
            relationship: tosca.relationships.BelongsToOne

    vmme_vspgwu:
      type: tosca.nodes.ServiceDependency
      properties:
        connect_method: None
      requirements:
        - subscriber_service:
            node: service#vmme
            relationship: tosca.relationships.BelongsToOne
        - provider_service:
            node: service#vspgwu
            relationship: tosca.relationships.BelongsToOne

    vspgwc_vspgwu:
      type: tosca.nodes.ServiceDependency
      properties:
        connect_method: None
      requirements:
        - subscriber_service:
            node: service#vspgwc
            relationship: tosca.relationships.BelongsToOne
        - provider_service:
            node: service#vspgwu
            relationship: tosca.relationships.BelongsToOne

# M-CORD Subscriber
    service#mcord:
      type: tosca.nodes.MCordSubscriberService
      properties:
        name: mcord

    # ServiceDependency M-CORD to vENB
    mcord_vmme:
      type: tosca.nodes.ServiceDependency
      properties:
        connect_method: None
      requirements:
        - subscriber_service:
            node: service#vmme
            relationship: tosca.relationships.BelongsToOne
        - provider_service:
            node: service#mcord
            relationship: tosca.relationships.BelongsToOne
