blob: b992a4ea9ed42a80f53a5f3c556de7bbe0240a2f [file] [log] [blame]
{#
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/xos.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:
no-delete: true
no-create: true
no-update: true
{% if use_fabric %}
# Fabric, fully defined in fabric.yaml
service#ONOS_Fabric:
type: tosca.nodes.ONOSService
properties:
no-delete: true
no-create: true
no-update: true
{% endif %}
# VTN networking for OpenStack Compute Nodes
{% for node in groups['compute'] %}
{% for ext_if in compute_external_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:
no-delete: true
no-create: true
no-update: true
# VTN bridgeId field for node {{ hostvars[node]['ansible_hostname'] }}
{{ hostvars[node]['ansible_hostname'] }}_bridgeId_tag:
type: tosca.nodes.Tag
properties:
name: bridgeId
value: of:0000{{ node_interface['macaddress'] | hwaddr('bare') }}
requirements:
- target:
node: {{ hostvars[node]['ansible_hostname'] }}
relationship: tosca.relationships.TagsObject
- service:
node: service#ONOS_CORD
relationship: tosca.relationships.MemberOfService
# VTN dataPlaneIntf field for node {{ hostvars[node]['ansible_hostname'] }}
{{ hostvars[node]['ansible_hostname'] }}_dataPlaneIntf_tag:
type: tosca.nodes.Tag
properties:
name: dataPlaneIntf
value: fabric
requirements:
- target:
node: {{ hostvars[node]['ansible_hostname'] }}
relationship: tosca.relationships.TagsObject
- service:
node: service#ONOS_CORD
relationship: tosca.relationships.MemberOfService
# VTN dataPlaneIp field for node {{ hostvars[node]['ansible_hostname'] }}
{{ hostvars[node]['ansible_hostname'] }}_dataPlaneIp_tag:
type: tosca.nodes.Tag
properties:
name: dataPlaneIp
value: {{ ( node_interface['ipv4']['address'] ~ '/' ~ node_interface['ipv4']['netmask'] ) | ipaddr('cidr') }}
requirements:
- target:
node: {{ hostvars[node]['ansible_hostname'] }}
relationship: tosca.relationships.TagsObject
- service:
node: service#ONOS_CORD
relationship: tosca.relationships.MemberOfService
{% if use_management_hosts %}
# VTN management interface field for node {{ hostvars[node]['ansible_hostname'] }}
{{ hostvars[node]['ansible_hostname'] }}_hostManagementIface_tag:
type: tosca.nodes.Tag
properties:
name: hostManagementIface
value: {{ vtn_management_host_net_interface }}
requirements:
- target:
node: {{ hostvars[node]['ansible_hostname'] }}
relationship: tosca.relationships.TagsObject
- service:
node: service#ONOS_CORD
relationship: tosca.relationships.MemberOfService
{% endif %}
{% if use_fabric %}
# Fabric location field for node {{ hostvars[node]['ansible_hostname'] }}
{{ hostvars[node]['ansible_hostname'] }}_location_tag:
type: tosca.nodes.Tag
properties:
name: location
value: of:0000000000000001/1
requirements:
- target:
node: {{ hostvars[node]['ansible_hostname'] }}
relationship: tosca.relationships.TagsObject
- service:
node: service#ONOS_Fabric
relationship: tosca.relationships.MemberOfService
{% endif %}
{% endif %}
{% endfor %}
{% endfor %}