# coding=utf-8
# *** WARNING: this file was generated by pulumi-language-python. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import builtins as _builtins
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from .. import _utilities
from . import outputs
from ._inputs import *

__all__ = ['ZonePolicyArgs', 'ZonePolicy']

@pulumi.input_type
class ZonePolicyArgs:
    def __init__(__self__, *,
                 action: pulumi.Input[_builtins.str],
                 destination: pulumi.Input['ZonePolicyDestinationArgs'],
                 source: pulumi.Input['ZonePolicySourceArgs'],
                 auto_allow_return_traffic: Optional[pulumi.Input[_builtins.bool]] = None,
                 connection_state_type: Optional[pulumi.Input[_builtins.str]] = None,
                 connection_states: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 description: Optional[pulumi.Input[_builtins.str]] = None,
                 enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 index: Optional[pulumi.Input[_builtins.int]] = None,
                 ip_version: Optional[pulumi.Input[_builtins.str]] = None,
                 logging: Optional[pulumi.Input[_builtins.bool]] = None,
                 match_ip_sec_type: Optional[pulumi.Input[_builtins.str]] = None,
                 match_opposite_protocol: Optional[pulumi.Input[_builtins.bool]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 protocol: Optional[pulumi.Input[_builtins.str]] = None,
                 schedule: Optional[pulumi.Input['ZonePolicyScheduleArgs']] = None,
                 site: Optional[pulumi.Input[_builtins.str]] = None):
        """
        The set of arguments for constructing a ZonePolicy resource.
        :param pulumi.Input[_builtins.str] action: Determines which action to take on matching traffic. Must be one of `BLOCK`, `ALLOW`, or `REJECT`.
        :param pulumi.Input['ZonePolicyDestinationArgs'] destination: The zone matching the destination of the traffic. Optionally match on a specific destination inside the zone.
        :param pulumi.Input['ZonePolicySourceArgs'] source: The zone matching the source of the traffic. Optionally match on a specific source inside the zone.
        :param pulumi.Input[_builtins.bool] auto_allow_return_traffic: Creates a built-in policy for the opposite Zone Pair to automatically allow the return traffic. If disabled, return traffic must be manually allowed
        :param pulumi.Input[_builtins.str] connection_state_type: Optionally match on a firewall connection state such as traffic associated with an already existing connection. Valid values are `ALL`, `RESPOND_ONLY`, or `CUSTOM`.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] connection_states: Connection states to match when `connection_state_type` is `CUSTOM`. Valid values include `ESTABLISHED`, `NEW`, `RELATED`, and `INVALID`.
        :param pulumi.Input[_builtins.str] description: Description of the firewall zone policy.
        :param pulumi.Input[_builtins.bool] enabled: Enable the policy
        :param pulumi.Input[_builtins.int] index: Priority index for the policy.
        :param pulumi.Input[_builtins.str] ip_version: Optionally match on only IPv4 or IPv6. Valid values are `BOTH`, `IPV4`, or `IPV6`.
        :param pulumi.Input[_builtins.bool] logging: Enable to generate syslog entries when traffic is matched.
        :param pulumi.Input[_builtins.str] match_ip_sec_type: Optionally match on traffic encrypted by IPsec. This is typically used for Ipsec Policy-Based VPNs. Valid values are `MATCH_IP_SEC` or `MATCH_NON_IP_SEC`.
        :param pulumi.Input[_builtins.bool] match_opposite_protocol: Whether to match the opposite protocol.
        :param pulumi.Input[_builtins.str] name: The name of the firewall zone policy.
        :param pulumi.Input[_builtins.str] protocol: Optionally match a specific protocol. Valid values include: `all`, `tcp_udp`, `tcp`, `udp`, etc.
        :param pulumi.Input['ZonePolicyScheduleArgs'] schedule: Enforce this policy at specific times.
        :param pulumi.Input[_builtins.str] site: The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.
        """
        pulumi.set(__self__, "action", action)
        pulumi.set(__self__, "destination", destination)
        pulumi.set(__self__, "source", source)
        if auto_allow_return_traffic is not None:
            pulumi.set(__self__, "auto_allow_return_traffic", auto_allow_return_traffic)
        if connection_state_type is not None:
            pulumi.set(__self__, "connection_state_type", connection_state_type)
        if connection_states is not None:
            pulumi.set(__self__, "connection_states", connection_states)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if index is not None:
            pulumi.set(__self__, "index", index)
        if ip_version is not None:
            pulumi.set(__self__, "ip_version", ip_version)
        if logging is not None:
            pulumi.set(__self__, "logging", logging)
        if match_ip_sec_type is not None:
            pulumi.set(__self__, "match_ip_sec_type", match_ip_sec_type)
        if match_opposite_protocol is not None:
            pulumi.set(__self__, "match_opposite_protocol", match_opposite_protocol)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if protocol is not None:
            pulumi.set(__self__, "protocol", protocol)
        if schedule is not None:
            pulumi.set(__self__, "schedule", schedule)
        if site is not None:
            pulumi.set(__self__, "site", site)

    @_builtins.property
    @pulumi.getter
    def action(self) -> pulumi.Input[_builtins.str]:
        """
        Determines which action to take on matching traffic. Must be one of `BLOCK`, `ALLOW`, or `REJECT`.
        """
        return pulumi.get(self, "action")

    @action.setter
    def action(self, value: pulumi.Input[_builtins.str]):
        pulumi.set(self, "action", value)

    @_builtins.property
    @pulumi.getter
    def destination(self) -> pulumi.Input['ZonePolicyDestinationArgs']:
        """
        The zone matching the destination of the traffic. Optionally match on a specific destination inside the zone.
        """
        return pulumi.get(self, "destination")

    @destination.setter
    def destination(self, value: pulumi.Input['ZonePolicyDestinationArgs']):
        pulumi.set(self, "destination", value)

    @_builtins.property
    @pulumi.getter
    def source(self) -> pulumi.Input['ZonePolicySourceArgs']:
        """
        The zone matching the source of the traffic. Optionally match on a specific source inside the zone.
        """
        return pulumi.get(self, "source")

    @source.setter
    def source(self, value: pulumi.Input['ZonePolicySourceArgs']):
        pulumi.set(self, "source", value)

    @_builtins.property
    @pulumi.getter(name="autoAllowReturnTraffic")
    def auto_allow_return_traffic(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Creates a built-in policy for the opposite Zone Pair to automatically allow the return traffic. If disabled, return traffic must be manually allowed
        """
        return pulumi.get(self, "auto_allow_return_traffic")

    @auto_allow_return_traffic.setter
    def auto_allow_return_traffic(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "auto_allow_return_traffic", value)

    @_builtins.property
    @pulumi.getter(name="connectionStateType")
    def connection_state_type(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Optionally match on a firewall connection state such as traffic associated with an already existing connection. Valid values are `ALL`, `RESPOND_ONLY`, or `CUSTOM`.
        """
        return pulumi.get(self, "connection_state_type")

    @connection_state_type.setter
    def connection_state_type(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "connection_state_type", value)

    @_builtins.property
    @pulumi.getter(name="connectionStates")
    def connection_states(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        Connection states to match when `connection_state_type` is `CUSTOM`. Valid values include `ESTABLISHED`, `NEW`, `RELATED`, and `INVALID`.
        """
        return pulumi.get(self, "connection_states")

    @connection_states.setter
    def connection_states(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]):
        pulumi.set(self, "connection_states", value)

    @_builtins.property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Description of the firewall zone policy.
        """
        return pulumi.get(self, "description")

    @description.setter
    def description(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "description", value)

    @_builtins.property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enable the policy
        """
        return pulumi.get(self, "enabled")

    @enabled.setter
    def enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "enabled", value)

    @_builtins.property
    @pulumi.getter
    def index(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Priority index for the policy.
        """
        return pulumi.get(self, "index")

    @index.setter
    def index(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "index", value)

    @_builtins.property
    @pulumi.getter(name="ipVersion")
    def ip_version(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Optionally match on only IPv4 or IPv6. Valid values are `BOTH`, `IPV4`, or `IPV6`.
        """
        return pulumi.get(self, "ip_version")

    @ip_version.setter
    def ip_version(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "ip_version", value)

    @_builtins.property
    @pulumi.getter
    def logging(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enable to generate syslog entries when traffic is matched.
        """
        return pulumi.get(self, "logging")

    @logging.setter
    def logging(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "logging", value)

    @_builtins.property
    @pulumi.getter(name="matchIpSecType")
    def match_ip_sec_type(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Optionally match on traffic encrypted by IPsec. This is typically used for Ipsec Policy-Based VPNs. Valid values are `MATCH_IP_SEC` or `MATCH_NON_IP_SEC`.
        """
        return pulumi.get(self, "match_ip_sec_type")

    @match_ip_sec_type.setter
    def match_ip_sec_type(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "match_ip_sec_type", value)

    @_builtins.property
    @pulumi.getter(name="matchOppositeProtocol")
    def match_opposite_protocol(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Whether to match the opposite protocol.
        """
        return pulumi.get(self, "match_opposite_protocol")

    @match_opposite_protocol.setter
    def match_opposite_protocol(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "match_opposite_protocol", value)

    @_builtins.property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The name of the firewall zone policy.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "name", value)

    @_builtins.property
    @pulumi.getter
    def protocol(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Optionally match a specific protocol. Valid values include: `all`, `tcp_udp`, `tcp`, `udp`, etc.
        """
        return pulumi.get(self, "protocol")

    @protocol.setter
    def protocol(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "protocol", value)

    @_builtins.property
    @pulumi.getter
    def schedule(self) -> Optional[pulumi.Input['ZonePolicyScheduleArgs']]:
        """
        Enforce this policy at specific times.
        """
        return pulumi.get(self, "schedule")

    @schedule.setter
    def schedule(self, value: Optional[pulumi.Input['ZonePolicyScheduleArgs']]):
        pulumi.set(self, "schedule", value)

    @_builtins.property
    @pulumi.getter
    def site(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.
        """
        return pulumi.get(self, "site")

    @site.setter
    def site(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "site", value)


@pulumi.input_type
class _ZonePolicyState:
    def __init__(__self__, *,
                 action: Optional[pulumi.Input[_builtins.str]] = None,
                 auto_allow_return_traffic: Optional[pulumi.Input[_builtins.bool]] = None,
                 connection_state_type: Optional[pulumi.Input[_builtins.str]] = None,
                 connection_states: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 description: Optional[pulumi.Input[_builtins.str]] = None,
                 destination: Optional[pulumi.Input['ZonePolicyDestinationArgs']] = None,
                 enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 index: Optional[pulumi.Input[_builtins.int]] = None,
                 ip_version: Optional[pulumi.Input[_builtins.str]] = None,
                 logging: Optional[pulumi.Input[_builtins.bool]] = None,
                 match_ip_sec_type: Optional[pulumi.Input[_builtins.str]] = None,
                 match_opposite_protocol: Optional[pulumi.Input[_builtins.bool]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 protocol: Optional[pulumi.Input[_builtins.str]] = None,
                 schedule: Optional[pulumi.Input['ZonePolicyScheduleArgs']] = None,
                 site: Optional[pulumi.Input[_builtins.str]] = None,
                 source: Optional[pulumi.Input['ZonePolicySourceArgs']] = None):
        """
        Input properties used for looking up and filtering ZonePolicy resources.
        :param pulumi.Input[_builtins.str] action: Determines which action to take on matching traffic. Must be one of `BLOCK`, `ALLOW`, or `REJECT`.
        :param pulumi.Input[_builtins.bool] auto_allow_return_traffic: Creates a built-in policy for the opposite Zone Pair to automatically allow the return traffic. If disabled, return traffic must be manually allowed
        :param pulumi.Input[_builtins.str] connection_state_type: Optionally match on a firewall connection state such as traffic associated with an already existing connection. Valid values are `ALL`, `RESPOND_ONLY`, or `CUSTOM`.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] connection_states: Connection states to match when `connection_state_type` is `CUSTOM`. Valid values include `ESTABLISHED`, `NEW`, `RELATED`, and `INVALID`.
        :param pulumi.Input[_builtins.str] description: Description of the firewall zone policy.
        :param pulumi.Input['ZonePolicyDestinationArgs'] destination: The zone matching the destination of the traffic. Optionally match on a specific destination inside the zone.
        :param pulumi.Input[_builtins.bool] enabled: Enable the policy
        :param pulumi.Input[_builtins.int] index: Priority index for the policy.
        :param pulumi.Input[_builtins.str] ip_version: Optionally match on only IPv4 or IPv6. Valid values are `BOTH`, `IPV4`, or `IPV6`.
        :param pulumi.Input[_builtins.bool] logging: Enable to generate syslog entries when traffic is matched.
        :param pulumi.Input[_builtins.str] match_ip_sec_type: Optionally match on traffic encrypted by IPsec. This is typically used for Ipsec Policy-Based VPNs. Valid values are `MATCH_IP_SEC` or `MATCH_NON_IP_SEC`.
        :param pulumi.Input[_builtins.bool] match_opposite_protocol: Whether to match the opposite protocol.
        :param pulumi.Input[_builtins.str] name: The name of the firewall zone policy.
        :param pulumi.Input[_builtins.str] protocol: Optionally match a specific protocol. Valid values include: `all`, `tcp_udp`, `tcp`, `udp`, etc.
        :param pulumi.Input['ZonePolicyScheduleArgs'] schedule: Enforce this policy at specific times.
        :param pulumi.Input[_builtins.str] site: The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.
        :param pulumi.Input['ZonePolicySourceArgs'] source: The zone matching the source of the traffic. Optionally match on a specific source inside the zone.
        """
        if action is not None:
            pulumi.set(__self__, "action", action)
        if auto_allow_return_traffic is not None:
            pulumi.set(__self__, "auto_allow_return_traffic", auto_allow_return_traffic)
        if connection_state_type is not None:
            pulumi.set(__self__, "connection_state_type", connection_state_type)
        if connection_states is not None:
            pulumi.set(__self__, "connection_states", connection_states)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if destination is not None:
            pulumi.set(__self__, "destination", destination)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if index is not None:
            pulumi.set(__self__, "index", index)
        if ip_version is not None:
            pulumi.set(__self__, "ip_version", ip_version)
        if logging is not None:
            pulumi.set(__self__, "logging", logging)
        if match_ip_sec_type is not None:
            pulumi.set(__self__, "match_ip_sec_type", match_ip_sec_type)
        if match_opposite_protocol is not None:
            pulumi.set(__self__, "match_opposite_protocol", match_opposite_protocol)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if protocol is not None:
            pulumi.set(__self__, "protocol", protocol)
        if schedule is not None:
            pulumi.set(__self__, "schedule", schedule)
        if site is not None:
            pulumi.set(__self__, "site", site)
        if source is not None:
            pulumi.set(__self__, "source", source)

    @_builtins.property
    @pulumi.getter
    def action(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Determines which action to take on matching traffic. Must be one of `BLOCK`, `ALLOW`, or `REJECT`.
        """
        return pulumi.get(self, "action")

    @action.setter
    def action(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "action", value)

    @_builtins.property
    @pulumi.getter(name="autoAllowReturnTraffic")
    def auto_allow_return_traffic(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Creates a built-in policy for the opposite Zone Pair to automatically allow the return traffic. If disabled, return traffic must be manually allowed
        """
        return pulumi.get(self, "auto_allow_return_traffic")

    @auto_allow_return_traffic.setter
    def auto_allow_return_traffic(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "auto_allow_return_traffic", value)

    @_builtins.property
    @pulumi.getter(name="connectionStateType")
    def connection_state_type(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Optionally match on a firewall connection state such as traffic associated with an already existing connection. Valid values are `ALL`, `RESPOND_ONLY`, or `CUSTOM`.
        """
        return pulumi.get(self, "connection_state_type")

    @connection_state_type.setter
    def connection_state_type(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "connection_state_type", value)

    @_builtins.property
    @pulumi.getter(name="connectionStates")
    def connection_states(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        Connection states to match when `connection_state_type` is `CUSTOM`. Valid values include `ESTABLISHED`, `NEW`, `RELATED`, and `INVALID`.
        """
        return pulumi.get(self, "connection_states")

    @connection_states.setter
    def connection_states(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]):
        pulumi.set(self, "connection_states", value)

    @_builtins.property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Description of the firewall zone policy.
        """
        return pulumi.get(self, "description")

    @description.setter
    def description(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "description", value)

    @_builtins.property
    @pulumi.getter
    def destination(self) -> Optional[pulumi.Input['ZonePolicyDestinationArgs']]:
        """
        The zone matching the destination of the traffic. Optionally match on a specific destination inside the zone.
        """
        return pulumi.get(self, "destination")

    @destination.setter
    def destination(self, value: Optional[pulumi.Input['ZonePolicyDestinationArgs']]):
        pulumi.set(self, "destination", value)

    @_builtins.property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enable the policy
        """
        return pulumi.get(self, "enabled")

    @enabled.setter
    def enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "enabled", value)

    @_builtins.property
    @pulumi.getter
    def index(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Priority index for the policy.
        """
        return pulumi.get(self, "index")

    @index.setter
    def index(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "index", value)

    @_builtins.property
    @pulumi.getter(name="ipVersion")
    def ip_version(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Optionally match on only IPv4 or IPv6. Valid values are `BOTH`, `IPV4`, or `IPV6`.
        """
        return pulumi.get(self, "ip_version")

    @ip_version.setter
    def ip_version(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "ip_version", value)

    @_builtins.property
    @pulumi.getter
    def logging(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enable to generate syslog entries when traffic is matched.
        """
        return pulumi.get(self, "logging")

    @logging.setter
    def logging(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "logging", value)

    @_builtins.property
    @pulumi.getter(name="matchIpSecType")
    def match_ip_sec_type(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Optionally match on traffic encrypted by IPsec. This is typically used for Ipsec Policy-Based VPNs. Valid values are `MATCH_IP_SEC` or `MATCH_NON_IP_SEC`.
        """
        return pulumi.get(self, "match_ip_sec_type")

    @match_ip_sec_type.setter
    def match_ip_sec_type(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "match_ip_sec_type", value)

    @_builtins.property
    @pulumi.getter(name="matchOppositeProtocol")
    def match_opposite_protocol(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Whether to match the opposite protocol.
        """
        return pulumi.get(self, "match_opposite_protocol")

    @match_opposite_protocol.setter
    def match_opposite_protocol(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "match_opposite_protocol", value)

    @_builtins.property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The name of the firewall zone policy.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "name", value)

    @_builtins.property
    @pulumi.getter
    def protocol(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Optionally match a specific protocol. Valid values include: `all`, `tcp_udp`, `tcp`, `udp`, etc.
        """
        return pulumi.get(self, "protocol")

    @protocol.setter
    def protocol(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "protocol", value)

    @_builtins.property
    @pulumi.getter
    def schedule(self) -> Optional[pulumi.Input['ZonePolicyScheduleArgs']]:
        """
        Enforce this policy at specific times.
        """
        return pulumi.get(self, "schedule")

    @schedule.setter
    def schedule(self, value: Optional[pulumi.Input['ZonePolicyScheduleArgs']]):
        pulumi.set(self, "schedule", value)

    @_builtins.property
    @pulumi.getter
    def site(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.
        """
        return pulumi.get(self, "site")

    @site.setter
    def site(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "site", value)

    @_builtins.property
    @pulumi.getter
    def source(self) -> Optional[pulumi.Input['ZonePolicySourceArgs']]:
        """
        The zone matching the source of the traffic. Optionally match on a specific source inside the zone.
        """
        return pulumi.get(self, "source")

    @source.setter
    def source(self, value: Optional[pulumi.Input['ZonePolicySourceArgs']]):
        pulumi.set(self, "source", value)


@pulumi.type_token("unifi:firewall/zonePolicy:ZonePolicy")
class ZonePolicy(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 action: Optional[pulumi.Input[_builtins.str]] = None,
                 auto_allow_return_traffic: Optional[pulumi.Input[_builtins.bool]] = None,
                 connection_state_type: Optional[pulumi.Input[_builtins.str]] = None,
                 connection_states: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 description: Optional[pulumi.Input[_builtins.str]] = None,
                 destination: Optional[pulumi.Input[Union['ZonePolicyDestinationArgs', 'ZonePolicyDestinationArgsDict']]] = None,
                 enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 index: Optional[pulumi.Input[_builtins.int]] = None,
                 ip_version: Optional[pulumi.Input[_builtins.str]] = None,
                 logging: Optional[pulumi.Input[_builtins.bool]] = None,
                 match_ip_sec_type: Optional[pulumi.Input[_builtins.str]] = None,
                 match_opposite_protocol: Optional[pulumi.Input[_builtins.bool]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 protocol: Optional[pulumi.Input[_builtins.str]] = None,
                 schedule: Optional[pulumi.Input[Union['ZonePolicyScheduleArgs', 'ZonePolicyScheduleArgsDict']]] = None,
                 site: Optional[pulumi.Input[_builtins.str]] = None,
                 source: Optional[pulumi.Input[Union['ZonePolicySourceArgs', 'ZonePolicySourceArgsDict']]] = None,
                 __props__=None):
        """
        The `firewall.ZonePolicy` resource manages firewall policies between zones in the UniFi controller. This resource allows you to create, update, and delete policies that define allowed or blocked traffic between zones.

        !> This is experimental feature, that requires UniFi OS 9.0.0 or later and Zone Based Firewall feature enabled. Check [official documentation](https://help.ui.com/hc/en-us/articles/28223082254743-Migrating-to-Zone-Based-Firewalls-in-UniFi) how to migate to Zone-Based firewalls.

        ## Example Usage

        ```python
        import pulumi
        import pulumiverse_unifi as unifi

        network = unifi.Network("network",
            name="my-network",
            purpose="corporate",
            subnet="10.0.10.0/24",
            vlan_id=400)
        src = unifi.firewall.Zone("src",
            name="my-source-zone",
            networks=[network.id])
        dst = unifi.firewall.Zone("dst", name="my-destination-zone")
        # Allow TCP/UDP traffic from any ip and port other than 192.168.1.1 and 443 in `src` zone to `dst` zone
        policy = unifi.firewall.ZonePolicy("policy",
            name="my-zone-policy",
            action="ALLOW",
            protocol="tcp_udp",
            source={
                "zone_id": src.id,
                "ips": ["192.168.1.1"],
                "port": 443,
                "match_opposite_ips": True,
                "match_opposite_ports": True,
            },
            destination={
                "zone_id": dst.id,
            },
            schedule={
                "mode": "EVERY_DAY",
                "time_all_day": False,
                "time_from": "08:00",
                "time_to": "17:00",
            })
        web_ports = unifi.firewall.Group("web-ports",
            name="web-apps",
            type="port-group",
            members=[
                "80",
                "443",
            ])
        # Block TCP/UDP traffic from any ip and port in `src` zone to `dst` zone ports 80 and 443 defined in port group
        policy2 = unifi.firewall.ZonePolicy("policy2",
            name="my-policy-2",
            action="BLOCK",
            protocol="tcp_udp",
            source={
                "zone_id": src.id,
            },
            destination={
                "zone_id": dst.id,
                "port_group_id": web_ports.id,
            })
        ```

        ## Import

        import from provider configured site

        ```sh
        $ pulumi import unifi:firewall/zonePolicy:ZonePolicy mynetwork 5dc28e5e9106d105bdc87217
        ```

        import from another site

        ```sh
        $ pulumi import unifi:firewall/zonePolicy:ZonePolicy mynetwork zone:5dc28e5e9106d105bdc87217
        ```

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[_builtins.str] action: Determines which action to take on matching traffic. Must be one of `BLOCK`, `ALLOW`, or `REJECT`.
        :param pulumi.Input[_builtins.bool] auto_allow_return_traffic: Creates a built-in policy for the opposite Zone Pair to automatically allow the return traffic. If disabled, return traffic must be manually allowed
        :param pulumi.Input[_builtins.str] connection_state_type: Optionally match on a firewall connection state such as traffic associated with an already existing connection. Valid values are `ALL`, `RESPOND_ONLY`, or `CUSTOM`.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] connection_states: Connection states to match when `connection_state_type` is `CUSTOM`. Valid values include `ESTABLISHED`, `NEW`, `RELATED`, and `INVALID`.
        :param pulumi.Input[_builtins.str] description: Description of the firewall zone policy.
        :param pulumi.Input[Union['ZonePolicyDestinationArgs', 'ZonePolicyDestinationArgsDict']] destination: The zone matching the destination of the traffic. Optionally match on a specific destination inside the zone.
        :param pulumi.Input[_builtins.bool] enabled: Enable the policy
        :param pulumi.Input[_builtins.int] index: Priority index for the policy.
        :param pulumi.Input[_builtins.str] ip_version: Optionally match on only IPv4 or IPv6. Valid values are `BOTH`, `IPV4`, or `IPV6`.
        :param pulumi.Input[_builtins.bool] logging: Enable to generate syslog entries when traffic is matched.
        :param pulumi.Input[_builtins.str] match_ip_sec_type: Optionally match on traffic encrypted by IPsec. This is typically used for Ipsec Policy-Based VPNs. Valid values are `MATCH_IP_SEC` or `MATCH_NON_IP_SEC`.
        :param pulumi.Input[_builtins.bool] match_opposite_protocol: Whether to match the opposite protocol.
        :param pulumi.Input[_builtins.str] name: The name of the firewall zone policy.
        :param pulumi.Input[_builtins.str] protocol: Optionally match a specific protocol. Valid values include: `all`, `tcp_udp`, `tcp`, `udp`, etc.
        :param pulumi.Input[Union['ZonePolicyScheduleArgs', 'ZonePolicyScheduleArgsDict']] schedule: Enforce this policy at specific times.
        :param pulumi.Input[_builtins.str] site: The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.
        :param pulumi.Input[Union['ZonePolicySourceArgs', 'ZonePolicySourceArgsDict']] source: The zone matching the source of the traffic. Optionally match on a specific source inside the zone.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: ZonePolicyArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        The `firewall.ZonePolicy` resource manages firewall policies between zones in the UniFi controller. This resource allows you to create, update, and delete policies that define allowed or blocked traffic between zones.

        !> This is experimental feature, that requires UniFi OS 9.0.0 or later and Zone Based Firewall feature enabled. Check [official documentation](https://help.ui.com/hc/en-us/articles/28223082254743-Migrating-to-Zone-Based-Firewalls-in-UniFi) how to migate to Zone-Based firewalls.

        ## Example Usage

        ```python
        import pulumi
        import pulumiverse_unifi as unifi

        network = unifi.Network("network",
            name="my-network",
            purpose="corporate",
            subnet="10.0.10.0/24",
            vlan_id=400)
        src = unifi.firewall.Zone("src",
            name="my-source-zone",
            networks=[network.id])
        dst = unifi.firewall.Zone("dst", name="my-destination-zone")
        # Allow TCP/UDP traffic from any ip and port other than 192.168.1.1 and 443 in `src` zone to `dst` zone
        policy = unifi.firewall.ZonePolicy("policy",
            name="my-zone-policy",
            action="ALLOW",
            protocol="tcp_udp",
            source={
                "zone_id": src.id,
                "ips": ["192.168.1.1"],
                "port": 443,
                "match_opposite_ips": True,
                "match_opposite_ports": True,
            },
            destination={
                "zone_id": dst.id,
            },
            schedule={
                "mode": "EVERY_DAY",
                "time_all_day": False,
                "time_from": "08:00",
                "time_to": "17:00",
            })
        web_ports = unifi.firewall.Group("web-ports",
            name="web-apps",
            type="port-group",
            members=[
                "80",
                "443",
            ])
        # Block TCP/UDP traffic from any ip and port in `src` zone to `dst` zone ports 80 and 443 defined in port group
        policy2 = unifi.firewall.ZonePolicy("policy2",
            name="my-policy-2",
            action="BLOCK",
            protocol="tcp_udp",
            source={
                "zone_id": src.id,
            },
            destination={
                "zone_id": dst.id,
                "port_group_id": web_ports.id,
            })
        ```

        ## Import

        import from provider configured site

        ```sh
        $ pulumi import unifi:firewall/zonePolicy:ZonePolicy mynetwork 5dc28e5e9106d105bdc87217
        ```

        import from another site

        ```sh
        $ pulumi import unifi:firewall/zonePolicy:ZonePolicy mynetwork zone:5dc28e5e9106d105bdc87217
        ```

        :param str resource_name: The name of the resource.
        :param ZonePolicyArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(ZonePolicyArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 action: Optional[pulumi.Input[_builtins.str]] = None,
                 auto_allow_return_traffic: Optional[pulumi.Input[_builtins.bool]] = None,
                 connection_state_type: Optional[pulumi.Input[_builtins.str]] = None,
                 connection_states: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 description: Optional[pulumi.Input[_builtins.str]] = None,
                 destination: Optional[pulumi.Input[Union['ZonePolicyDestinationArgs', 'ZonePolicyDestinationArgsDict']]] = None,
                 enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 index: Optional[pulumi.Input[_builtins.int]] = None,
                 ip_version: Optional[pulumi.Input[_builtins.str]] = None,
                 logging: Optional[pulumi.Input[_builtins.bool]] = None,
                 match_ip_sec_type: Optional[pulumi.Input[_builtins.str]] = None,
                 match_opposite_protocol: Optional[pulumi.Input[_builtins.bool]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 protocol: Optional[pulumi.Input[_builtins.str]] = None,
                 schedule: Optional[pulumi.Input[Union['ZonePolicyScheduleArgs', 'ZonePolicyScheduleArgsDict']]] = None,
                 site: Optional[pulumi.Input[_builtins.str]] = None,
                 source: Optional[pulumi.Input[Union['ZonePolicySourceArgs', 'ZonePolicySourceArgsDict']]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = ZonePolicyArgs.__new__(ZonePolicyArgs)

            if action is None and not opts.urn:
                raise TypeError("Missing required property 'action'")
            __props__.__dict__["action"] = action
            __props__.__dict__["auto_allow_return_traffic"] = auto_allow_return_traffic
            __props__.__dict__["connection_state_type"] = connection_state_type
            __props__.__dict__["connection_states"] = connection_states
            __props__.__dict__["description"] = description
            if destination is None and not opts.urn:
                raise TypeError("Missing required property 'destination'")
            __props__.__dict__["destination"] = destination
            __props__.__dict__["enabled"] = enabled
            __props__.__dict__["index"] = index
            __props__.__dict__["ip_version"] = ip_version
            __props__.__dict__["logging"] = logging
            __props__.__dict__["match_ip_sec_type"] = match_ip_sec_type
            __props__.__dict__["match_opposite_protocol"] = match_opposite_protocol
            __props__.__dict__["name"] = name
            __props__.__dict__["protocol"] = protocol
            __props__.__dict__["schedule"] = schedule
            __props__.__dict__["site"] = site
            if source is None and not opts.urn:
                raise TypeError("Missing required property 'source'")
            __props__.__dict__["source"] = source
        super(ZonePolicy, __self__).__init__(
            'unifi:firewall/zonePolicy:ZonePolicy',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            action: Optional[pulumi.Input[_builtins.str]] = None,
            auto_allow_return_traffic: Optional[pulumi.Input[_builtins.bool]] = None,
            connection_state_type: Optional[pulumi.Input[_builtins.str]] = None,
            connection_states: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
            description: Optional[pulumi.Input[_builtins.str]] = None,
            destination: Optional[pulumi.Input[Union['ZonePolicyDestinationArgs', 'ZonePolicyDestinationArgsDict']]] = None,
            enabled: Optional[pulumi.Input[_builtins.bool]] = None,
            index: Optional[pulumi.Input[_builtins.int]] = None,
            ip_version: Optional[pulumi.Input[_builtins.str]] = None,
            logging: Optional[pulumi.Input[_builtins.bool]] = None,
            match_ip_sec_type: Optional[pulumi.Input[_builtins.str]] = None,
            match_opposite_protocol: Optional[pulumi.Input[_builtins.bool]] = None,
            name: Optional[pulumi.Input[_builtins.str]] = None,
            protocol: Optional[pulumi.Input[_builtins.str]] = None,
            schedule: Optional[pulumi.Input[Union['ZonePolicyScheduleArgs', 'ZonePolicyScheduleArgsDict']]] = None,
            site: Optional[pulumi.Input[_builtins.str]] = None,
            source: Optional[pulumi.Input[Union['ZonePolicySourceArgs', 'ZonePolicySourceArgsDict']]] = None) -> 'ZonePolicy':
        """
        Get an existing ZonePolicy resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[_builtins.str] action: Determines which action to take on matching traffic. Must be one of `BLOCK`, `ALLOW`, or `REJECT`.
        :param pulumi.Input[_builtins.bool] auto_allow_return_traffic: Creates a built-in policy for the opposite Zone Pair to automatically allow the return traffic. If disabled, return traffic must be manually allowed
        :param pulumi.Input[_builtins.str] connection_state_type: Optionally match on a firewall connection state such as traffic associated with an already existing connection. Valid values are `ALL`, `RESPOND_ONLY`, or `CUSTOM`.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] connection_states: Connection states to match when `connection_state_type` is `CUSTOM`. Valid values include `ESTABLISHED`, `NEW`, `RELATED`, and `INVALID`.
        :param pulumi.Input[_builtins.str] description: Description of the firewall zone policy.
        :param pulumi.Input[Union['ZonePolicyDestinationArgs', 'ZonePolicyDestinationArgsDict']] destination: The zone matching the destination of the traffic. Optionally match on a specific destination inside the zone.
        :param pulumi.Input[_builtins.bool] enabled: Enable the policy
        :param pulumi.Input[_builtins.int] index: Priority index for the policy.
        :param pulumi.Input[_builtins.str] ip_version: Optionally match on only IPv4 or IPv6. Valid values are `BOTH`, `IPV4`, or `IPV6`.
        :param pulumi.Input[_builtins.bool] logging: Enable to generate syslog entries when traffic is matched.
        :param pulumi.Input[_builtins.str] match_ip_sec_type: Optionally match on traffic encrypted by IPsec. This is typically used for Ipsec Policy-Based VPNs. Valid values are `MATCH_IP_SEC` or `MATCH_NON_IP_SEC`.
        :param pulumi.Input[_builtins.bool] match_opposite_protocol: Whether to match the opposite protocol.
        :param pulumi.Input[_builtins.str] name: The name of the firewall zone policy.
        :param pulumi.Input[_builtins.str] protocol: Optionally match a specific protocol. Valid values include: `all`, `tcp_udp`, `tcp`, `udp`, etc.
        :param pulumi.Input[Union['ZonePolicyScheduleArgs', 'ZonePolicyScheduleArgsDict']] schedule: Enforce this policy at specific times.
        :param pulumi.Input[_builtins.str] site: The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.
        :param pulumi.Input[Union['ZonePolicySourceArgs', 'ZonePolicySourceArgsDict']] source: The zone matching the source of the traffic. Optionally match on a specific source inside the zone.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _ZonePolicyState.__new__(_ZonePolicyState)

        __props__.__dict__["action"] = action
        __props__.__dict__["auto_allow_return_traffic"] = auto_allow_return_traffic
        __props__.__dict__["connection_state_type"] = connection_state_type
        __props__.__dict__["connection_states"] = connection_states
        __props__.__dict__["description"] = description
        __props__.__dict__["destination"] = destination
        __props__.__dict__["enabled"] = enabled
        __props__.__dict__["index"] = index
        __props__.__dict__["ip_version"] = ip_version
        __props__.__dict__["logging"] = logging
        __props__.__dict__["match_ip_sec_type"] = match_ip_sec_type
        __props__.__dict__["match_opposite_protocol"] = match_opposite_protocol
        __props__.__dict__["name"] = name
        __props__.__dict__["protocol"] = protocol
        __props__.__dict__["schedule"] = schedule
        __props__.__dict__["site"] = site
        __props__.__dict__["source"] = source
        return ZonePolicy(resource_name, opts=opts, __props__=__props__)

    @_builtins.property
    @pulumi.getter
    def action(self) -> pulumi.Output[_builtins.str]:
        """
        Determines which action to take on matching traffic. Must be one of `BLOCK`, `ALLOW`, or `REJECT`.
        """
        return pulumi.get(self, "action")

    @_builtins.property
    @pulumi.getter(name="autoAllowReturnTraffic")
    def auto_allow_return_traffic(self) -> pulumi.Output[_builtins.bool]:
        """
        Creates a built-in policy for the opposite Zone Pair to automatically allow the return traffic. If disabled, return traffic must be manually allowed
        """
        return pulumi.get(self, "auto_allow_return_traffic")

    @_builtins.property
    @pulumi.getter(name="connectionStateType")
    def connection_state_type(self) -> pulumi.Output[_builtins.str]:
        """
        Optionally match on a firewall connection state such as traffic associated with an already existing connection. Valid values are `ALL`, `RESPOND_ONLY`, or `CUSTOM`.
        """
        return pulumi.get(self, "connection_state_type")

    @_builtins.property
    @pulumi.getter(name="connectionStates")
    def connection_states(self) -> pulumi.Output[Optional[Sequence[_builtins.str]]]:
        """
        Connection states to match when `connection_state_type` is `CUSTOM`. Valid values include `ESTABLISHED`, `NEW`, `RELATED`, and `INVALID`.
        """
        return pulumi.get(self, "connection_states")

    @_builtins.property
    @pulumi.getter
    def description(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Description of the firewall zone policy.
        """
        return pulumi.get(self, "description")

    @_builtins.property
    @pulumi.getter
    def destination(self) -> pulumi.Output['outputs.ZonePolicyDestination']:
        """
        The zone matching the destination of the traffic. Optionally match on a specific destination inside the zone.
        """
        return pulumi.get(self, "destination")

    @_builtins.property
    @pulumi.getter
    def enabled(self) -> pulumi.Output[_builtins.bool]:
        """
        Enable the policy
        """
        return pulumi.get(self, "enabled")

    @_builtins.property
    @pulumi.getter
    def index(self) -> pulumi.Output[_builtins.int]:
        """
        Priority index for the policy.
        """
        return pulumi.get(self, "index")

    @_builtins.property
    @pulumi.getter(name="ipVersion")
    def ip_version(self) -> pulumi.Output[_builtins.str]:
        """
        Optionally match on only IPv4 or IPv6. Valid values are `BOTH`, `IPV4`, or `IPV6`.
        """
        return pulumi.get(self, "ip_version")

    @_builtins.property
    @pulumi.getter
    def logging(self) -> pulumi.Output[_builtins.bool]:
        """
        Enable to generate syslog entries when traffic is matched.
        """
        return pulumi.get(self, "logging")

    @_builtins.property
    @pulumi.getter(name="matchIpSecType")
    def match_ip_sec_type(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Optionally match on traffic encrypted by IPsec. This is typically used for Ipsec Policy-Based VPNs. Valid values are `MATCH_IP_SEC` or `MATCH_NON_IP_SEC`.
        """
        return pulumi.get(self, "match_ip_sec_type")

    @_builtins.property
    @pulumi.getter(name="matchOppositeProtocol")
    def match_opposite_protocol(self) -> pulumi.Output[_builtins.bool]:
        """
        Whether to match the opposite protocol.
        """
        return pulumi.get(self, "match_opposite_protocol")

    @_builtins.property
    @pulumi.getter
    def name(self) -> pulumi.Output[_builtins.str]:
        """
        The name of the firewall zone policy.
        """
        return pulumi.get(self, "name")

    @_builtins.property
    @pulumi.getter
    def protocol(self) -> pulumi.Output[_builtins.str]:
        """
        Optionally match a specific protocol. Valid values include: `all`, `tcp_udp`, `tcp`, `udp`, etc.
        """
        return pulumi.get(self, "protocol")

    @_builtins.property
    @pulumi.getter
    def schedule(self) -> pulumi.Output['outputs.ZonePolicySchedule']:
        """
        Enforce this policy at specific times.
        """
        return pulumi.get(self, "schedule")

    @_builtins.property
    @pulumi.getter
    def site(self) -> pulumi.Output[_builtins.str]:
        """
        The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.
        """
        return pulumi.get(self, "site")

    @_builtins.property
    @pulumi.getter
    def source(self) -> pulumi.Output['outputs.ZonePolicySource']:
        """
        The zone matching the source of the traffic. Optionally match on a specific source inside the zone.
        """
        return pulumi.get(self, "source")

