# {{ ansible_managed }}

{# Domain, table, chain #}
{# ==================== #}
{% set ferm__tpl_domain = ferm__domains %}
{% set ferm__tpl_table = [ 'filter' ] %}
{% set ferm__tpl_chain = [ 'INPUT' ] %}
{% if item.domain|d() %}
{%   if item.domain is string %}
{%     set ferm__tpl_domain = [ item.domain ] %}
{%   else %}
{%     set ferm__tpl_domain = item.domain | unique %}
{%   endif %}
{% elif item.domains|d() %}
{%   if item.domains is string %}
{%     set ferm__tpl_domain = [ item.domains ] %}
{%   else %}
{%     set ferm__tpl_domain = item.domains | unique %}
{%   endif %}
{% endif %}
{% if item.table|d() %}
{%   if item.table is string %}
{%     set ferm__tpl_table = [ item.table ] %}
{%   else %}
{%     set ferm__tpl_table = item.table | unique %}
{%   endif %}
{% elif item.tables|d() %}
{%   if item.tables is string %}
{%     set ferm__tpl_table = [ item.tables ] %}
{%   else %}
{%     set ferm__tpl_table = item.tables | unique %}
{%   endif %}
{% endif %}
{% if item.chain|d() %}
{%   if item.chain is string %}
{%     set ferm__tpl_chain = [ item.chain ] %}
{%   else %}
{%     set ferm__tpl_chain = item.chain | unique %}
{%   endif %}
{% elif item.chains|d() %}
{%   if item.chains is string %}
{%     set ferm__tpl_chain = [ item.chains ] %}
{%   else %}
{%     set ferm__tpl_chain = item.chains | unique %}
{%   endif %}
{% endif %}
{% set ferm__tpl_domain_args = [] %}
{% if ferm__tpl_domain %}
{%   if ferm__tpl_domain | length == 1 %}
{%     set _ = ferm__tpl_domain_args.append("domain " +  ferm__tpl_domain | join(" ")) %}
{%   else %}
{%     set _ = ferm__tpl_domain_args.append("domain (" + ferm__tpl_domain | join(" ") + ")") %}
{%   endif %}
{% endif %}
{% if ferm__tpl_table %}
{%   if ferm__tpl_table | length == 1 %}
{%     set _ = ferm__tpl_domain_args.append("table " +  ferm__tpl_table | join(" ")) %}
{%   else %}
{%     set _ = ferm__tpl_domain_args.append("table (" + ferm__tpl_table | join(" ") + ")") %}
{%   endif %}
{% endif %}
{% if ferm__tpl_chain %}
{%   if ferm__tpl_chain | length == 1 %}
{%     set _ = ferm__tpl_domain_args.append("chain " +  ferm__tpl_chain | join(" ")) %}
{%   else %}
{%     set _ = ferm__tpl_domain_args.append("chain (" + ferm__tpl_chain | join(" ") + ")") %}
{%   endif %}
{% endif %}
{# Rule arguments #}
{# ============== #}
{% set ferm__tpl_invalid_target = 'DROP' %}
{% set ferm__tpl_active_target = 'ACCEPT' %}
{% set ferm__tpl_module = 'conntrack' %}
{% set ferm__tpl_interface = [] %}
{% set ferm__tpl_outerface = [] %}
{% set ferm__tpl_interface_not = [] %}
{% set ferm__tpl_outerface_not = [] %}
{% if item.invalid_target|d() %}
{%   set ferm__tpl_invalid_target = item.invalid_target %}
{% endif %}
{% if item.active_target|d() %}
{%   set ferm__tpl_active_target = item.active_target %}
{% endif %}
{% if item.module|d() %}
{%   set ferm__tpl_module = item.module %}
{% endif %}
{% if item.interface|d() %}
{%   if item.interface is string %}
{%     set ferm__tpl_interface = [ item.interface ] %}
{%   else %}
{%     set ferm__tpl_interface = item.interface | unique %}
{%   endif %}
{% elif item.interface_not|d() %}
{%   if item.interface_not is string %}
{%     set ferm__tpl_interface_not = [ item.interface_not ] %}
{%   else %}
{%     set ferm__tpl_interface_not = item.interface_not | unique %}
{%   endif %}
{% endif %}
{% if item.outerface|d() %}
{%   if item.outerface is string %}
{%     set ferm__tpl_outerface = [ item.outerface ] %}
{%   else %}
{%     set ferm__tpl_outerface = item.outerface | unique %}
{%   endif %}
{% elif item.outerface_not|d() %}
{%   if item.outerface_not is string %}
{%     set ferm__tpl_outerface_not = [ item.outerface_not ] %}
{%   else %}
{%     set ferm__tpl_outerface_not = item.outerface_not | unique %}
{%   endif %}
{% endif %}
{% set ferm__tpl_arguments = [] %}
{% if ferm__tpl_interface %}
{%   set _ = ferm__tpl_arguments.append("interface (" + ferm__tpl_interface | join(" ") + ")") %}
{% elif ferm__tpl_interface_not %}
{%   set _ = ferm__tpl_arguments.append("interface ! " + ferm__tpl_interface_not[0] | string) %}
{% endif %}
{% if ferm__tpl_outerface %}
{%   set _ = ferm__tpl_arguments.append("outerface (" + ferm__tpl_outerface | join(" ") + ")") %}
{% elif ferm__tpl_outerface_not %}
{%   set _ = ferm__tpl_arguments.append("outerface ! " + ferm__tpl_outerface_not[0] | string) %}
{% endif %}
{% if ferm__tpl_module == 'state' %}
{%   set ferm__tpl_module_command = 'mod state state' %}
{% else %}
{%   set ferm__tpl_module_command = 'mod conntrack ctstate' %}
{% endif %}
{# Main template #}
{# ============= #}
{% if item.comment|d() %}
# {{ item.comment }}

{% endif %}
{% if item.when is undefined or item.when | bool %}
{%   if ferm__tpl_domain_args %}{{ ferm__tpl_domain_args | join(" ") }} {% endif %}{
    {% if ferm__tpl_arguments %}{{ ferm__tpl_arguments | join(" ") }} {% endif %}{
        {{ ferm__tpl_module_command }} INVALID {{ ferm__tpl_invalid_target }};
        {{ ferm__tpl_module_command }} (ESTABLISHED RELATED) {{ ferm__tpl_active_target }};
    }
}
{% else %}
# Rule disabled by 'item.when' condition
{% endif %}

