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

imports:
   - custom_types/onosservice.yaml
   - custom_types/node.yaml
   - custom_types/node.yaml

description: Configures VTN networking for OpenStack compute nodes

topology_template:
  node_templates:

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

{% if use_fabric %}
# Fabric, fully defined in fabric.yaml
    service#ONOS_Fabric:
      type: tosca.nodes.ONOSService
      properties:
        name: ONOS_Fabric
        must-exist: true
{% endif %}

# VTN networking for OpenStack Compute Nodes
{% for node in groups['compute'] %}
{% for ext_if in computenode_fabric_interfaces %}
{% set ansible_ext_if = 'ansible_' ~ ext_if | regex_replace('\W', '_') %}
{% if hostvars[node][ansible_ext_if] is defined and 'ipv4' in hostvars[node][ansible_ext_if] %}
{% set node_interface = hostvars[node][ansible_ext_if] %}

# Compute node: {{ node }}, with interface {{ ansible_ext_if }}
    {{ hostvars[node]['ansible_hostname'] }}:
      type: tosca.nodes.Node
      properties:
        must-exist: true
        name: {{ hostvars[node]['ansible_hostname'] }}
        bridgeId: of:0000{{ node_interface['macaddress'] | hwaddr('bare') }}
        dataPlaneIntf: {{ vtn_integration_bridge_interface }}
        dataPlaneIp: {{ ( node_interface['ipv4']['address'] ~ '/' ~ node_interface['ipv4']['netmask'] ) | ipaddr('cidr') }}
{% if use_vtn_net_management_host %}
        hostManagementIface: {{ vtn_net_management_host_interface }}
{% endif %}

{% endif %}
{% endfor %}
{% endfor %}

