# bird templates/bird.conf - {{ ansible_managed }}
#
# SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
# SPDX-License-Identifier: Apache-2.0

router id {{ bird_conf_router_id }};

{% for name, proto in bird_conf_default_protocols.items() %}
protocol {{ name }} {
  {{ proto | indent(2) -}}
}
{% endfor -%}

{% for name, filter in bird_conf_filters.items() %}
filter {{ name }} {
  {{ filter | indent(2) -}}
}
{% endfor -%}

{% for temp in bird_conf_templates %}
template {{ temp.protocol }} {{ temp.name }} {
  {{ temp.options | indent(2) -}}
}
{% endfor -%}

{% for proto in bird_conf_protocols %}
protocol {{ proto.protocol }} {{ proto.name }} {% if proto.template is defined  %}from {{ proto.template }} {% endif -%} {
  {{ proto.options | indent(2) -}}
}
{% endfor -%}
