!
{% for iface in old_ifaces %}
interface {{ iface }}
{%     for group in old_ifaces[iface].gr_join %}
{%         if old_ifaces[iface].gr_join[group] %}
{%             for source in old_ifaces[iface].gr_join[group] %}
 no ip igmp join {{ group }} {{ source }}
{%             endfor %}
{%         else %}
 no ip igmp join {{ group }}
{%         endif %}
{%     endfor %}
 no ip igmp
!
{% endfor %}
{% for interface, interface_config in ifaces.items() %}
interface {{ interface }}
{%     if interface_config.version %}
 ip igmp version {{ interface_config.version }}
{%     else %}
{# IGMP default version 3 #}
 ip igmp
{%     endif %}
{%     if interface_config.query_interval %}
 ip igmp query-interval {{ interface_config.query_interval }}
{%     endif %}
{%     if interface_config.query_max_resp_time %}
 ip igmp query-max-response-time {{ interface_config.query_max_resp_time }}
{%     endif %}
{%     for group in interface_config.gr_join %}
{%         if ifaces[iface].gr_join[group] %}
{%             for source in ifaces[iface].gr_join[group] %}
 ip igmp join {{ group }} {{ source }}
{%             endfor %}
{%         else %}
 ip igmp join {{ group }}
{%         endif %}
{%     endfor %}
!
{% endfor %}
!