##############################################################################
# Copyright (c) 2018 Mirantis Inc., Enea AB and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
{%- import 'net_map.j2' as nm with context %}
{%- import 'net_macros.j2' as ma with context %}
{%- set vlan_private_start = (nm.vlan_private | string).rsplit('-')[0] %}
---
classes:
  - service.neutron.compute.single
  - service.neutron.compute.opendaylight.single
{%- if '-ovs-' in conf.MCP_DEPLOY_SCENARIO %}
  - system.nova.compute.nfv.hugepages
  - system.neutron.compute.nfv.dpdk
{%- endif %}
  - cluster.mcp-common-noha.openstack_compute
  - cluster.mcp-odl-noha
parameters:
  linux:
    network:
      interface:
{%- if '-ovs-' in conf.MCP_DEPLOY_SCENARIO %}
        dpdk0:
          name: ${_param:dpdk0_name}
          pci: ${_param:dpdk0_pci}
          driver: ${_param:dpdk0_driver}
          enabled: true
          bridge: br-prv
          type: dpdk_ovs_port
          n_rxq: ${_param:dpdk0_n_rxq}
          mtu: ${_param:interface_mtu}
        br-prv:
          enabled: true
          type: dpdk_ovs_bridge
          proto: static
          address: ${_param:tenant_address}
          netmask: ${_param:opnfv_net_private_mask}
        {{ nm.cmp001.nic_private }}:
          type: dpdk  # Not a meaningful type, just match 'dpdk' for filtering
        {{ nm.cmp001.nic_public }}:
          enabled: true
          type: eth
          mtu: ${_param:interface_mtu}
          proto: manual
        br-floating:
          enabled: true
          type: ovs_bridge
        float-to-ex:
          enabled: true
          type: ovs_port
          mtu: ${_param:interface_mtu}
          bridge: br-floating
        br-ex:
          enabled: true
          type: bridge
          address: ${_param:external_address}
          netmask: ${_param:opnfv_net_public_mask}
          use_interfaces:
            - {{ ma.interface_str(nm.cmp001.nic_public, nm.vlan_public) }}
          use_ovs_ports:
            - float-to-ex
          gateway: ${_param:opnfv_net_public_gw}
          name_servers: {{ nm.dns_public }}
{%- else %}
        br-mesh:
          enabled: true
          type: bridge
          proto: static
          address: ${_param:tenant_address}
          netmask: ${_param:opnfv_net_private_mask}
          use_interfaces:
            - {{ ma.interface_str(nm.cmp001.nic_private, vlan_private_start) }}
        ovs_port_{{ nm.cmp001.nic_public }}:
          enabled: true
          name: {{ ma.interface_str(nm.cmp001.nic_public, nm.vlan_public) }}
          mtu: ${_param:interface_mtu}
          proto: manual
          ovs_port_type: OVSPort
          type: ovs_port
          ovs_bridge: br-floating
          bridge: br-floating
        br-floating:
          enabled: true
          type: ovs_bridge
          proto: static
          address: ${_param:external_address}
          netmask: ${_param:opnfv_net_public_mask}
          use_interfaces:
            - {{ ma.interface_str(nm.cmp001.nic_public, nm.vlan_public) }}
          gateway: ${_param:opnfv_net_public_gw}
          name_servers: {{ nm.dns_public }}
          noifupdown: true
{%- endif %}