{#
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/sdncontrollerservice.yaml
   - custom_types/sdncontrollervendor.yaml
   - custom_types/sdncontrollerserviceinstance.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 %}

# 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

# 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


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

# CORD Slices
    {{ site_name }}_sdncontroller:
      description: SDN controller slice
      type: tosca.nodes.Slice
      properties:
          name: {{ site_name }}_sdncontroller
          default_isolation: vm
          network: noauto
      requirements:
          - site:
              node: mysite
              relationship: tosca.relationships.BelongsToOne
          - service:
              node: service#sdncontroller
              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_sdncontroller:
      type: tosca.nodes.SDNControllerVendor
      properties:
        name: intel_sdncontroller
      requirements:
        - image:
            node: trusty-server-multi-nic
            relationship: tosca.relationships.BelongsToOne
        - flavor:
            node: m1.small
            relationship: tosca.relationships.BelongsToOne

    serviceinstance#sdncontroller_instance:
      type: tosca.nodes.SDNControllerServiceInstance
      properties:
          name: sdncontroller_instance1
      requirements:
        - sdncontroller_vendor:
            node: intel_sdncontroller
            relationship: tosca.relationships.BelongsToOne
        - owner:
            node: service#sdncontroller
            relationship: tosca.relationships.BelongsToOne

# CORD NetworkSlices
    sdncontroller_slice_management_network:
      type: tosca.nodes.NetworkSlice
      requirements:
        - network:
            node: management
            relationship: tosca.relationships.BelongsToOne
        - slice:
            node: {{ site_name }}_sdncontroller
            relationship: tosca.relationships.BelongsToOne

    sdncontroller_slice_sbi_network:
      type: tosca.nodes.NetworkSlice
      requirements:
        - network:
            node: sbi_network
            relationship: tosca.relationships.BelongsToOne
        - slice:
            node: {{ site_name }}_sdncontroller
            relationship: tosca.relationships.BelongsToOne

    sdncontroller_slice_nbi_network:
      type: tosca.nodes.NetworkSlice
      requirements:
        - network:
            node: nbi_network
            relationship: tosca.relationships.BelongsToOne
        - slice:
            node: {{ site_name }}_sdncontroller
            relationship: tosca.relationships.BelongsToOne
