Ensure a zone has specific attributes.

    name
        The zone to modify.

    default : None
        Set this zone as the default zone if ``True``.

    masquerade : False
        Enable or disable masquerade for a zone.

    block_icmp : None
        List of ICMP types to block in the zone.

    prune_block_icmp : False
        If ``True``, remove all but the specified block_icmp from the zone.

    ports : None
        List of ports to add to the zone.

    prune_ports : False
        If ``True``, remove all but the specified ports from the zone.

    port_fwd : None
        List of port forwards to add to the zone.

    prune_port_fwd : False
        If ``True``, remove all but the specified port_fwd from the zone.

    services : None
        List of services to add to the zone.

    prune_services : False
        If ``True``, remove all but the specified services from the zone.
        .. note:: Currently defaults to True for compatibility, but will be changed to False in a future release.

    interfaces : None
        List of interfaces to add to the zone.

    prune_interfaces : False
        If ``True``, remove all but the specified interfaces from the zone.

    sources : None
        List of sources to add to the zone.

    prune_sources : False
        If ``True``, remove all but the specified sources from the zone.

    rich_rules : None
        List of rich rules to add to the zone.

    prune_rich_rules : False
        If ``True``, remove all but the specified rich rules from the zone.

def present(name,
            block_icmp=None,
            prune_block_icmp=False,
            default=None,
            masquerade=False,
            ports=None,
            prune_ports=False,
            port_fwd=None,
            prune_port_fwd=False,
            services=None,
            prune_services=False,
            interfaces=None,
            prune_interfaces=False,
            sources=None,
            prune_sources=False,
            rich_rules=None,
            prune_rich_rules=False):

    '''
    Ensure a zone has specific attributes.

    name
        The zone to modify.

    default : None
        Set this zone as the default zone if ``True``.

    masquerade : False
        Enable or disable masquerade for a zone.

    block_icmp : None
        List of ICMP types to block in the zone.

    prune_block_icmp : False
        If ``True``, remove all but the specified block_icmp from the zone.

    ports : None
        List of ports to add to the zone.

    prune_ports : False
        If ``True``, remove all but the specified ports from the zone.

    port_fwd : None
        List of port forwards to add to the zone.

    prune_port_fwd : False
        If ``True``, remove all but the specified port_fwd from the zone.

    services : None
        List of services to add to the zone.

    prune_services : False
        If ``True``, remove all but the specified services from the zone.
        .. note:: Currently defaults to True for compatibility, but will be changed to False in a future release.

    interfaces : None
        List of interfaces to add to the zone.

    prune_interfaces : False
        If ``True``, remove all but the specified interfaces from the zone.

    sources : None
        List of sources to add to the zone.

    prune_sources : False
        If ``True``, remove all but the specified sources from the zone.

    rich_rules : None
        List of rich rules to add to the zone.

    prune_rich_rules : False
        If ``True``, remove all but the specified rich rules from the zone.
    '''
    ret = _present(name, block_icmp, prune_block_icmp, default, masquerade, ports, prune_ports,
            port_fwd, prune_port_fwd, services, prune_services, interfaces, prune_interfaces,
            sources, prune_sources, rich_rules, prune_rich_rules)

    # Reload firewalld service on changes
    if ret['changes'] != {}:
        __salt__['firewalld.reload_rules']()

    return ret