!
{% 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 iface in ifaces %}
interface {{ iface }}
{%   if ifaces[iface].version %}
 ip igmp version {{ ifaces[iface].version }}
{%   else %}
{# IGMP default version 3 #}
 ip igmp
{%   endif %}
{%   if ifaces[iface].query_interval %}
 ip igmp query-interval {{ ifaces[iface].query_interval }}
{%   endif %}
{%   if ifaces[iface].query_max_resp_time %}
 ip igmp query-max-response-time {{ ifaces[iface].query_max_resp_time }}
{%   endif %}
{%   for group in ifaces[iface].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 %}
!