!
{% if rip_conf -%}
router rip
{% if old_default_distance -%}
no distance {{old_default_distance}}
{% endif -%}
{% if default_distance -%}
distance {{default_distance}}
{% endif -%}
{% if old_default_originate -%}
no default-information originate
{% endif -%}
{% if default_originate -%}
default-information originate
{% endif -%}
{% if old_rip.default_metric -%}
no default-metric {{old_rip.default_metric}}
{% endif -%}
{% if rip.default_metric -%}
default-metric {{rip.default_metric}}
{% endif -%}
{% for protocol in old_rip.redist -%}
{% if old_rip.redist[protocol]['metric'] and old_rip.redist[protocol]['route_map'] -%}
no redistribute {{protocol}} metric {{rip.redist[protocol]['metric']}} route-map {{rip.redist[protocol]['route_map']}}
{% elif old_rip.redist[protocol]['metric'] -%}
no redistribute {{protocol}} metric {{old_rip.redist[protocol]['metric']}}
{% elif old_rip.redist[protocol]['route_map'] -%}
no redistribute {{protocol}} route-map {{old_rip.redist[protocol]['route_map']}}
{% else -%}
no redistribute {{protocol}}
{% endif -%}
{% endfor -%}
{% for protocol in rip.redist -%}
{% if rip.redist[protocol]['metric'] and rip.redist[protocol]['route_map'] -%}
redistribute {{protocol}} metric {{rip.redist[protocol]['metric']}} route-map {{rip.redist[protocol]['route_map']}}
{% elif rip.redist[protocol]['metric'] -%}
redistribute {{protocol}} metric {{rip.redist[protocol]['metric']}}
{% elif rip.redist[protocol]['route_map'] -%}
redistribute {{protocol}} route-map {{rip.redist[protocol]['route_map']}}
{% else -%}
redistribute {{protocol}}
{% endif -%}
{% endfor -%}
{% for iface in old_rip.distribute -%}
{% if old_rip.distribute[iface].iface_access_list_in -%}
no distribute-list {{old_rip.distribute[iface].iface_access_list_in}} in {{iface}}
{% endif -%}
{% if old_rip.distribute[iface].iface_access_list_out -%}
no distribute-list {{old_rip.distribute[iface].iface_access_list_out}} out {{iface}}
{% endif -%}
{% if old_rip.distribute[iface].iface_prefix_list_in -%}
no distribute-list prefix {{old_rip.distribute[iface].iface_prefix_list_in}} in {{iface}}
{% endif -%}
{% if old_rip.distribute[iface].iface_prefix_list_out -%}
no distribute-list prefix {{old_rip.distribute[iface].iface_prefix_list_out}} out {{iface}}
{% endif -%}
{% endfor -%}
{% for iface in rip.distribute -%}
{% if rip.distribute[iface].iface_access_list_in -%}
distribute-list {{rip.distribute[iface].iface_access_list_in}} in {{iface}}
{% endif -%}
{% if rip.distribute[iface].iface_access_list_out -%}
distribute-list {{rip.distribute[iface].iface_access_list_out}} out {{iface}}
{% endif -%}
{% if rip.distribute[iface].iface_prefix_list_in -%}
distribute-list prefix {{rip.distribute[iface].iface_prefix_list_in}} in {{iface}}
{% endif -%}
{% if rip.distribute[iface].iface_prefix_list_out -%}
distribute-list prefix {{rip.distribute[iface].iface_prefix_list_out}} out {{iface}}
{% endif -%}
{% endfor -%}
{% if old_rip.dist_acl_in -%}
no distribute-list {{old_rip.dist_acl_in}} in
{% endif -%}
{% if rip.dist_acl_in -%}
distribute-list {{rip.dist_acl_in}} in
{% endif -%}
{% if old_rip.dist_acl_out -%}
no distribute-list {{old_rip.dist_acl_out}} out
{% endif -%}
{% if rip.dist_acl_out -%}
distribute-list {{rip.dist_acl_out}} out
{% endif -%}
{% if old_rip.dist_prfx_in -%}
no distribute-list prefix {{old_rip.dist_prfx_in}} in
{% endif -%}
{% if rip.dist_prfx_in -%}
distribute-list prefix {{rip.dist_prfx_in}} in
{% endif -%}
{% if old_rip.dist_prfx_out -%}
no distribute-list prefix {{old_rip.dist_prfx_out}} out
{% endif -%}
{% if rip.dist_prfx_out -%}
distribute-list prefix {{rip.dist_prfx_out}} out
{% endif -%}
{% for network in old_rip.networks -%}
no network {{network}}
{% endfor -%}
{% for network in rip.networks -%}
network {{network}}
{% endfor -%}
{% for iface in old_rip.ifaces -%}
no network {{iface}}
{% endfor -%}
{% for iface in rip.ifaces -%}
network {{iface}}
{% endfor -%}
{% for neighbor in old_rip.neighbors -%}
no neighbor {{neighbor}}
{% endfor -%}
{% for neighbor in rip.neighbors -%}
neighbor {{neighbor}}
{% endfor -%}
{% for net in rip.net_distance -%}
{% if rip.net_distance[net].access_list and rip.net_distance[net].distance -%}
distance {{rip.net_distance[net].distance}} {{net}} {{rip.net_distance[net].access_list}} 
{% else -%}
distance {{rip.net_distance[net].distance}} {{net}} 
{% endif -%}
{% endfor -%}
{% for passive_iface in old_rip.passive_iface -%}
no passive-interface {{passive_iface}}
{% endfor -%}
{% for passive_iface in rip.passive_iface -%}
passive-interface {{passive_iface}}
{% endfor -%}
{% for route in old_rip.route -%}
no route {{route}}
{% endfor -%}
{% for route in rip.route -%}
route {{route}}
{% endfor -%}
{% if old_rip.timer_update or old_rip.timer_timeout or old_rip.timer_garbage -%}
no timers basic
{% endif -%}
{% if rip.timer_update or rip.timer_timeout or rip.timer_garbage -%}
timers basic {{rip.timer_update}} {{rip.timer_timeout}} {{rip.timer_garbage}}
{% endif -%}
!
{% else -%}
no router rip
!
{% endif -%}