blob: a61c54fa5a264aa8b0b213d4a22f5c06d7bf21e2 [file] [log] [blame]
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 %}