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


{% for node in physical_node_list if node.name == ansible_hostname %}
auto {{ node.interface | default(mgmt_interface) }}

iface {{ node.interface | default(mgmt_interface) }} inet static
    address {{ mgmt_ipv4_first_octets }}.{{ node.ipv4_last_octet }}
    network {{ mgmt_ipv4_first_octets }}.0
    netmask 255.255.255.0
    broadcast {{ mgmt_ipv4_first_octets }}.255
{% if node.gateway_enabled is defined and node.gateway_enabled %}
    gateway {{ mgmt_ipv4_first_octets }}.1
{% endif %}
{% endfor %}
