! {# RIP key-chain definition #} {% if interface is defined and interface is not none %} {% for iface, iface_config in interface.items() %} {% if iface_config.authentication is defined and iface_config.authentication.md5 is defined and iface_config.authentication.md5 is not none %} key chain {{ iface }}-rip {% for key_id, key_options in iface_config.authentication.md5.items() %} key {{ key_id }} {% if key_options.password is defined and key_options.password is not none %} key-string {{ key_options.password }} {% endif %} {% endfor %} {% endif %} {% endfor %} {% endif %} ! {# Interface specific configuration #} {% if interface is defined and interface is not none %} {% for iface, iface_config in interface.items() %} interface {{ iface }} {% if iface_config.authentication is defined and iface_config.authentication.plaintext_password is defined and iface_config.authentication.plaintext_password is not none %} ip rip authentication mode text ip rip authentication string {{ iface_config.authentication.plaintext_password }} {% elif iface_config.authentication is defined and iface_config.authentication.md5 is defined and iface_config.authentication.md5 is not none %} ip rip authentication key-chain {{ iface }}-rip ip rip authentication mode md5 {% endif %} {% if iface_config.split_horizon is defined and iface_config.split_horizon.disable is defined %} no ip rip split-horizon {% endif %} {% if iface_config.split_horizon is defined and iface_config.split_horizon.poison_reverse is defined %} ip rip split-horizon poisoned-reverse {% endif %} {% endfor %} {% endif %} ! router rip {% if default_information is defined and default_information.originate is defined %} default-information originate {% endif %} {% if default_metric is defined and default_metric is not none %} default-metric {{ default_metric }} {% endif %} {% if default_distance is defined and default_distance is not none %} distance {{ default_distance }} {% endif %} {% if network_distance is defined and network_distance is not none %} {% for network, network_config in network_distance.items() %} {% if network_config.distance is defined and network_config.distance is not none %} distance {{ network_config.distance }} {{ network }} {% endif %} {% endfor %} {% endif %} {% if neighbor is defined and neighbor is not none %} {% for address in neighbor %} neighbor {{ address }} {% endfor %} {% endif %} {% if network is defined and network is not none %} {% for prefix in network %} network {{ prefix }} {% endfor %} {% endif %} {% if interface is defined and interface is not none %} {% for ifname in interface %} network {{ ifname }} {% endfor %} {% endif %} {% if passive_interface is defined and passive_interface is not none %} {% for ifname in passive_interface %} passive-interface {{ ifname }} {% endfor %} {% endif %} {% if redistribute is defined and redistribute is not none %} {% for protocol, protocol_config in redistribute.items() %} redistribute {{ protocol }} {{ 'metric ' + protocol_config.metric if protocol_config.metric is defined }} {{ 'route-map ' + protocol_config.route_map if protocol_config.route_map is defined }} {% endfor %} {% endif %} {% if route is defined and route is not none %} {% for prefix in route %} route {{ prefix }} {% endfor %} {% endif %} {# timers have default values #} timers basic {{ timers['update'] }} {{ timers.timeout }} {{ timers.garbage_collection }} {% if distribute_list is defined and distribute_list is not none %} {% if distribute_list.access_list is defined and distribute_list.access_list is not none %} {% if distribute_list.access_list.in is defined and distribute_list.access_list.in is not none %} distribute-list {{ distribute_list.access_list.in }} in {% endif %} {% if distribute_list.access_list.out is defined and distribute_list.access_list.out is not none %} distribute-list {{ distribute_list.access_list.out }} out {% endif %} {% endif %} {% if distribute_list.interface is defined and distribute_list.interface is not none %} {% for interface, interface_config in distribute_list.interface.items() %} {% if interface_config.access_list is defined and interface_config.access_list is not none %} {% if interface_config.access_list.in is defined and interface_config.access_list.in is not none %} distribute-list {{ interface_config.access_list.in }} in {{ interface }} {% endif %} {% if interface_config.access_list.out is defined and interface_config.access_list.out is not none %} distribute-list {{ interface_config.access_list.out }} out {{ interface }} {% endif %} {% endif %} {% if interface_config.prefix_list is defined and interface_config.prefix_list is not none %} {% if interface_config.prefix_list.in is defined and interface_config.prefix_list.in is not none %} distribute-list prefix {{ interface_config.prefix_list.in }} in {{ interface }} {% endif %} {% if interface_config.prefix_list.out is defined and interface_config.prefix_list.out is not none %} distribute-list prefix {{ interface_config.prefix_list.out }} out {{ interface }} {% endif %} {% endif %} {% endfor %} {% endif %} {% if distribute_list.prefix_list is defined and distribute_list.prefix_list is not none %} {% if distribute_list.prefix_list.in is defined and distribute_list.prefix_list.in is not none %} distribute-list prefix {{ distribute_list.prefix_list.in }} in {% endif %} {% if distribute_list.prefix_list.out is defined and distribute_list.prefix_list.out is not none %} distribute-list prefix {{ distribute_list.prefix_list.out }} out {% endif %} {% endif %} {% endif %} !