
{#
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: TOSCA example of adding a service and service instance

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/templateservice.yaml
   - custom_types/templateserviceinstance.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

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

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

# CORD Services
    service#template:
      type: tosca.nodes.TemplateService
      properties:
          name: template
          public_key: {{ lookup('file', config_cord_profile_dir + '/key_import/templateservice_rsa.pub') }}
          private_key_fn: /opt/xos/services/templateservice/keys/templateservice_rsa

# CORD Slices
    {{ site_name }}_template:
      description: Template Slice
      type: tosca.nodes.Slice
      properties:
          name: {{ site_name }}_template
          default_isolation: vm
          network: noauto
      requirements:
          - site:
              node: mysite
              relationship: tosca.relationships.BelongsToOne
          - service:
              node: service#template
              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
    serviceinstance#template:
      type: tosca.nodes.TemplateServiceInstance
      properties:
          name: template_instance
      requirements:
        - owner:
            node: service#template
            relationship: tosca.relationships.BelongsToOne

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

    template_slice_public_network:
      type: tosca.nodes.NetworkSlice
      requirements:
        - network:
            node: public
            relationship: tosca.relationships.BelongsToOne
        - slice:
            node: {{ site_name }}_template
            relationship: tosca.relationships.BelongsToOne
