{#
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/networkslice.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

    trusty-server-multi-nic:
      type: tosca.nodes.Image
      properties:
        name: trusty-server-multi-nic
        must-exist: true

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

# 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

# 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

# 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

# CORD Services
    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

# CORD Slices
    {{ 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: trusty-server-multi-nic
              relationship: tosca.relationships.BelongsToOne
          - default_flavor:
              node: m1.small
              relationship: tosca.relationships.BelongsToOne

# CORD Service Instances

    intel_vspgwu:
      type: tosca.nodes.VSPGWUVendor
      properties:
        name: intel_vspgwu
      requirements:
        - image:
            node: trusty-server-multi-nic
            relationship: tosca.relationships.BelongsToOne
        - flavor:
            node: m1.small
            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

# CORD NetworkSlices
    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_sbi_network:
      type: tosca.nodes.NetworkSlice
      requirements:
        - network:
            node: sbi_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
