{%- macro rich_rule(rule) -%} {%- if 'family' in rule %} {%- else %} {%- endif %} {%- 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_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 %}