# Created by platform-install: interface-config/templates/management.cfg.j2
{% for node in physical_node_list if node.name == ansible_hostname %}

# management bridge between physical and virtual interfaces for VTN
{% set mgmtbr_ip = ( vtn_net_management_host_cidr | ipaddr(node.ipv4_last_octet) | ipaddr('address')) %}
auto mgmtbridge
iface mgmtbridge inet static
  pre-up ip link add mgmtbridge type bridge
  bridge_ports mgmtbond vethmgmt0
  address {{ mgmtbr_ip }}
  network {{ vtn_net_management_host_cidr | ipaddr('network') }}
  netmask {{ vtn_net_management_host_cidr | ipaddr('netmask') }}
  broadcast {{ vtn_net_management_host_cidr | ipaddr('broadcast') }}
  hwaddress ether {{ ( vtn_net_management_host_hwaddr_prefix ~ ( mgmtbr_ip | ip4_hex )) | hwaddr('linux') }}
  dns-search {{ site_suffix }}
  dns-nameservers {{ dns_servers | join(" ") }}
  post-down ip link del mgmtbridge

# management bond of physical interfaces
auto mgmtbond
iface mgmtbond inet manual
  pre-up ip link add mgmtbond type bond
  pre-up ip link set mgmtbond up
  bond-slaves none
  bond-mode active-backup
  bond-miimon 100
  post-down ip link del mgmtbond

{% if management_net_interfaces %}
# physical network members of mgmtbond
{% for mgmt_int in management_net_interfaces %}
auto {{ mgmt_int }}
iface {{ mgmt_int }} inet manual
  pre-up ip link set {{ mgmt_int }} master mgmtbond
  bond-master mgmtbond
  bond-mode active-backup
  bond-primary {{ management_net_interfaces | join(' ') }}
  post-down ip link set dev {{ mgmt_int }} nomaster

{% endfor %}
{% endif %}

# veth interfaces for VTN MANAGEMENT_HOST
# vethmgmt0: connected to mgmtbond
auto vethmgmt0
iface vethmgmt0 inet manual
  pre-up ip link add vethmgmt0 type veth peer name vethmgmt1
  pre-up ip link set vethmgmt0 up
  pre-up ip link set vethmgmt1 up
  post-up ip link set dev vethmgmt0 master mgmtbridge
  pre-down ip link set dev vethmgmt0 nomaster
  post-down ip link del vethmgmt0

# vethmgmt1: connected to VTN as hostManagementIface, if enabled
# Brought up by vethmgmt0

{% endfor %}

