{%- macro rich_rule(rule) %}
{%- if 'ipset' in rule %}
{%- endif %}
{%- if 'source' in rule %}
{%- endif %}
{%- if 'destination' in rule %}
{%- endif %}
{%- if 'service' in rule %}
{%- endif %}
{%- if 'port' in rule %}
{%- endif %}
{%- if 'protocol' in rule %}
{%- endif %}
{%- if 'icmp_block' in rule %}
{%- endif %}
{%- if 'icmp_type' in rule %}
{%- endif %}
{%- if 'masquerade' in rule %}
{%- if rule.masquerade %}{%- endif %}
{%- endif %}
{%- if 'forward' in rule %}
{%- if rule.forward %}{%- endif %}
{%- endif %}
{%- if 'forward_port' in rule %}
{%- if 'comment' in rule.forward_port %}
{%- endif %}
{%- endif %}
{%- if 'source_port' in rule %}
{%- if 'comment' in rule.source_port %}
{%- endif %}
{%- endif %}
{%- if 'log' in rule %}
{%- if 'limit' in rule.log %}
{%- endif %}
{%- endif %}
{%- if 'audit' in rule %}
{%- if 'limit' in rule.audit %} {%- endif %}
{%- endif %}
{%- if 'accept' in rule %}
{%- if rule.accept is mapping and 'limit' in rule.accept %} {%- endif %}
{%- endif %}
{%- if 'reject' in rule %}
{%- endif %}
{%- if 'drop' in rule %}
{%- endif %}
{%- endmacro %}
{% if 'short' in zone %}{{ zone.short }}{% else %}{{ name }}{% endif %}
{% if 'description' in zone %}{{ zone.description }}{% endif %}
{%- if 'interfaces' in zone %}
{%- for v in zone.interfaces %}
{%- endfor %}
{%- endif %}
{%- if 'sources' in zone %}
{%- for v in zone.sources %}
{%- if 'comment' in v %}
{%- else %}
{%- endif %}
{%- endfor %}
{%- endif %}
{%- if 'ipsets' in zone %}
{%- for v in zone.ipsets %}
{%- if 'comment' in v %}
{%- else %}
{%- endif %}
{%- endfor %}
{%- endif %}
{%- for k,val in zone.items() %}
{%- if k.endswith("services") %}
{%- for v in val %}
{%- endfor %}
{%- endif %}
{%- endfor %}
{%- if 'ports' in zone %}
{%- for v in zone.ports %}
{%- if 'comment' in v %}
{%- endif %}
{%- endfor %}
{%- endif %}
{%- if 'protocols' in zone %}
{%- for v in zone.protocols %}
{%- endfor %}
{%- endif %}
{%- if 'icmp_blocks' in zone %}
{%- for v in zone.icmp_blocks %}
{%- endfor %}
{%- endif %}
{%- if 'icmp_block_inversion' in zone and zone.icmp_block_inversion %}
{%- endif %}
{%- if 'masquerade' in zone %}
{%- if zone.masquerade %}
{%- endif %}
{%- endif %}
{%- if 'forward_ports' in zone %}
{%- for v in zone.forward_ports %}
{%- if 'comment' in v %}
{%- endif %}
{%- endfor %}
{%- endif %}
{%- if 'source_ports' in zone %}
{%- for v in zone.source_ports %}
{%- if 'comment' in v %}
{%- endif %}
{%- endfor %}
{%- endif %}
{%- if 'rich_rules' in zone %}
{%- if zone.rich_rules is list %}
{%- set rich_rules = zone.rich_rules %}
{%- else %}
{%- set expanded_ipset_rules = [] %}
{%- for name,rule in zone.rich_rules|dictsort %}
{%- if 'ipsets' in rule %}
{%- for ipset in rule.ipsets %}
{%- set tmp_rule = {} %}
{%- set _dummy = tmp_rule.update(rule) %}
{%- set _dummy = tmp_rule.update({'ipset':{'name':ipset}}) %}
{%- set _dummy = expanded_ipset_rules.append(tmp_rule) %}
{%- endfor %}
{%- else %}
{%- set _dummy = expanded_ipset_rules.append(rule) %}
{%- endif %}
{%- endfor %}
{%- set rich_rules = [] %}
{%- for rule in expanded_ipset_rules %}
{%- if 'services' in rule %}
{%- for service in rule.services %}
{%- set tmp_rule = {} %}
{%- set _dummy = tmp_rule.update(rule) %}
{%- set _dummy = tmp_rule.update({'service':service}) %}
{%- set _dummy = rich_rules.append(tmp_rule) %}
{%- endfor %}
{%- else %}
{%- set _dummy = rich_rules.append(rule) %}
{%- endif %}
{%- endfor %}
{%- endif %}
{%- for rule in rich_rules %}
{{- rich_rule(rule) }}
{%- endfor %}
{%- endif %}