# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import copy
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from . import _utilities

__all__ = [
    'EventServiceDiscoveryNodeArgs',
    'FastHttpAppMonitorArgs',
    'FastHttpAppPoolMemberArgs',
    'FastHttpAppVirtualServerArgs',
    'FastHttpAppWafSecurityPolicyArgs',
    'FastHttpsAppMonitorArgs',
    'FastHttpsAppPoolMemberArgs',
    'FastHttpsAppTlsClientProfileArgs',
    'FastHttpsAppTlsServerProfileArgs',
    'FastHttpsAppVirtualServerArgs',
    'FastHttpsAppWafSecurityPolicyArgs',
    'FastTcpAppMonitorArgs',
    'FastTcpAppPoolMemberArgs',
    'FastTcpAppVirtualServerArgs',
    'FastUdpAppMonitorArgs',
    'FastUdpAppPoolMemberArgs',
    'FastUdpAppVirtualServerArgs',
    'WafPolicyFileTypeArgs',
    'WafPolicyGraphqlProfileArgs',
    'WafPolicyGraphqlProfileDefenseAttributeArgs',
    'WafPolicyHostNameArgs',
    'WafPolicyIpExceptionArgs',
    'WafPolicyPolicyBuilderArgs',
    'WafPolicySignaturesSettingArgs',
]

@pulumi.input_type
class EventServiceDiscoveryNodeArgs:
    def __init__(__self__, *,
                 id: Optional[pulumi.Input[str]] = None,
                 ip: Optional[pulumi.Input[str]] = None,
                 port: Optional[pulumi.Input[int]] = None):
        if id is not None:
            pulumi.set(__self__, "id", id)
        if ip is not None:
            pulumi.set(__self__, "ip", ip)
        if port is not None:
            pulumi.set(__self__, "port", port)

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def ip(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "ip")

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

    @property
    @pulumi.getter
    def port(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "port")

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


@pulumi.input_type
class FastHttpAppMonitorArgs:
    def __init__(__self__, *,
                 interval: Optional[pulumi.Input[int]] = None,
                 monitor_auth: Optional[pulumi.Input[bool]] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 response: Optional[pulumi.Input[str]] = None,
                 send_string: Optional[pulumi.Input[str]] = None,
                 username: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] interval: Set the time between health checks,in seconds for FAST-Generated Pool Monitor.
        :param pulumi.Input[bool] monitor_auth: set `true` if the servers require login credentials for web access on FAST-Generated Pool Monitor. default is `false`.
        :param pulumi.Input[str] password: password for web access on FAST-Generated Pool Monitor.
        :param pulumi.Input[str] response: The presence of this string anywhere in the HTTP response implies availability.
        :param pulumi.Input[str] send_string: Specify data to be sent during each health check for FAST-Generated Pool Monitor.
        :param pulumi.Input[str] username: username for web access on FAST-Generated Pool Monitor.
        """
        if interval is not None:
            pulumi.set(__self__, "interval", interval)
        if monitor_auth is not None:
            pulumi.set(__self__, "monitor_auth", monitor_auth)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if response is not None:
            pulumi.set(__self__, "response", response)
        if send_string is not None:
            pulumi.set(__self__, "send_string", send_string)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def interval(self) -> Optional[pulumi.Input[int]]:
        """
        Set the time between health checks,in seconds for FAST-Generated Pool Monitor.
        """
        return pulumi.get(self, "interval")

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

    @property
    @pulumi.getter(name="monitorAuth")
    def monitor_auth(self) -> Optional[pulumi.Input[bool]]:
        """
        set `true` if the servers require login credentials for web access on FAST-Generated Pool Monitor. default is `false`.
        """
        return pulumi.get(self, "monitor_auth")

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

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        password for web access on FAST-Generated Pool Monitor.
        """
        return pulumi.get(self, "password")

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

    @property
    @pulumi.getter
    def response(self) -> Optional[pulumi.Input[str]]:
        """
        The presence of this string anywhere in the HTTP response implies availability.
        """
        return pulumi.get(self, "response")

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

    @property
    @pulumi.getter(name="sendString")
    def send_string(self) -> Optional[pulumi.Input[str]]:
        """
        Specify data to be sent during each health check for FAST-Generated Pool Monitor.
        """
        return pulumi.get(self, "send_string")

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

    @property
    @pulumi.getter
    def username(self) -> Optional[pulumi.Input[str]]:
        """
        username for web access on FAST-Generated Pool Monitor.
        """
        return pulumi.get(self, "username")

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


@pulumi.input_type
class FastHttpAppPoolMemberArgs:
    def __init__(__self__, *,
                 addresses: pulumi.Input[Sequence[pulumi.Input[str]]],
                 connection_limit: Optional[pulumi.Input[int]] = None,
                 port: Optional[pulumi.Input[int]] = None,
                 priority_group: Optional[pulumi.Input[int]] = None,
                 share_nodes: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] addresses: List of server address to be used for FAST-Generated Pool.
        :param pulumi.Input[int] connection_limit: connectionLimit value to be used for FAST-Generated Pool.
        :param pulumi.Input[int] port: port number of serviceport to be used for FAST-Generated Pool.
        :param pulumi.Input[int] priority_group: priorityGroup value to be used for FAST-Generated Pool.
        :param pulumi.Input[bool] share_nodes: shareNodes value to be used for FAST-Generated Pool.
        """
        pulumi.set(__self__, "addresses", addresses)
        if connection_limit is not None:
            pulumi.set(__self__, "connection_limit", connection_limit)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if priority_group is not None:
            pulumi.set(__self__, "priority_group", priority_group)
        if share_nodes is not None:
            pulumi.set(__self__, "share_nodes", share_nodes)

    @property
    @pulumi.getter
    def addresses(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        List of server address to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "addresses")

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

    @property
    @pulumi.getter(name="connectionLimit")
    def connection_limit(self) -> Optional[pulumi.Input[int]]:
        """
        connectionLimit value to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "connection_limit")

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

    @property
    @pulumi.getter
    def port(self) -> Optional[pulumi.Input[int]]:
        """
        port number of serviceport to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "port")

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

    @property
    @pulumi.getter(name="priorityGroup")
    def priority_group(self) -> Optional[pulumi.Input[int]]:
        """
        priorityGroup value to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "priority_group")

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

    @property
    @pulumi.getter(name="shareNodes")
    def share_nodes(self) -> Optional[pulumi.Input[bool]]:
        """
        shareNodes value to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "share_nodes")

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


@pulumi.input_type
class FastHttpAppVirtualServerArgs:
    def __init__(__self__, *,
                 ip: pulumi.Input[str],
                 port: pulumi.Input[int]):
        """
        :param pulumi.Input[str] ip: IP4/IPv6 address to be used for virtual server ex: `10.1.1.1`
        :param pulumi.Input[int] port: Port number to used for accessing virtual server/application
        """
        pulumi.set(__self__, "ip", ip)
        pulumi.set(__self__, "port", port)

    @property
    @pulumi.getter
    def ip(self) -> pulumi.Input[str]:
        """
        IP4/IPv6 address to be used for virtual server ex: `10.1.1.1`
        """
        return pulumi.get(self, "ip")

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

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[int]:
        """
        Port number to used for accessing virtual server/application
        """
        return pulumi.get(self, "port")

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


@pulumi.input_type
class FastHttpAppWafSecurityPolicyArgs:
    def __init__(__self__, *,
                 enable: pulumi.Input[bool]):
        """
        :param pulumi.Input[bool] enable: Setting `true` will enable FAST to create WAF Security Policy.
        """
        pulumi.set(__self__, "enable", enable)

    @property
    @pulumi.getter
    def enable(self) -> pulumi.Input[bool]:
        """
        Setting `true` will enable FAST to create WAF Security Policy.
        """
        return pulumi.get(self, "enable")

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


@pulumi.input_type
class FastHttpsAppMonitorArgs:
    def __init__(__self__, *,
                 interval: Optional[pulumi.Input[int]] = None,
                 monitor_auth: Optional[pulumi.Input[bool]] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 response: Optional[pulumi.Input[str]] = None,
                 send_string: Optional[pulumi.Input[str]] = None,
                 username: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] interval: Set the time between health checks,in seconds for FAST-Generated Pool Monitor.
        :param pulumi.Input[bool] monitor_auth: set `true` if the servers require login credentials for web access on FAST-Generated Pool Monitor. default is `false`.
        :param pulumi.Input[str] password: password for web access on FAST-Generated Pool Monitor.
        :param pulumi.Input[str] response: The presence of this string anywhere in the HTTP response implies availability.
        :param pulumi.Input[str] send_string: Specify data to be sent during each health check for FAST-Generated Pool Monitor.
        :param pulumi.Input[str] username: username for web access on FAST-Generated Pool Monitor.
        """
        if interval is not None:
            pulumi.set(__self__, "interval", interval)
        if monitor_auth is not None:
            pulumi.set(__self__, "monitor_auth", monitor_auth)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if response is not None:
            pulumi.set(__self__, "response", response)
        if send_string is not None:
            pulumi.set(__self__, "send_string", send_string)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def interval(self) -> Optional[pulumi.Input[int]]:
        """
        Set the time between health checks,in seconds for FAST-Generated Pool Monitor.
        """
        return pulumi.get(self, "interval")

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

    @property
    @pulumi.getter(name="monitorAuth")
    def monitor_auth(self) -> Optional[pulumi.Input[bool]]:
        """
        set `true` if the servers require login credentials for web access on FAST-Generated Pool Monitor. default is `false`.
        """
        return pulumi.get(self, "monitor_auth")

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

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        password for web access on FAST-Generated Pool Monitor.
        """
        return pulumi.get(self, "password")

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

    @property
    @pulumi.getter
    def response(self) -> Optional[pulumi.Input[str]]:
        """
        The presence of this string anywhere in the HTTP response implies availability.
        """
        return pulumi.get(self, "response")

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

    @property
    @pulumi.getter(name="sendString")
    def send_string(self) -> Optional[pulumi.Input[str]]:
        """
        Specify data to be sent during each health check for FAST-Generated Pool Monitor.
        """
        return pulumi.get(self, "send_string")

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

    @property
    @pulumi.getter
    def username(self) -> Optional[pulumi.Input[str]]:
        """
        username for web access on FAST-Generated Pool Monitor.
        """
        return pulumi.get(self, "username")

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


@pulumi.input_type
class FastHttpsAppPoolMemberArgs:
    def __init__(__self__, *,
                 addresses: pulumi.Input[Sequence[pulumi.Input[str]]],
                 connection_limit: Optional[pulumi.Input[int]] = None,
                 port: Optional[pulumi.Input[int]] = None,
                 priority_group: Optional[pulumi.Input[int]] = None,
                 share_nodes: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] addresses: List of server address to be used for FAST-Generated Pool.
        :param pulumi.Input[int] connection_limit: connectionLimit value to be used for FAST-Generated Pool.
        :param pulumi.Input[int] port: port number of serviceport to be used for FAST-Generated Pool.
        :param pulumi.Input[int] priority_group: priorityGroup value to be used for FAST-Generated Pool.
        :param pulumi.Input[bool] share_nodes: shareNodes value to be used for FAST-Generated Pool.
        """
        pulumi.set(__self__, "addresses", addresses)
        if connection_limit is not None:
            pulumi.set(__self__, "connection_limit", connection_limit)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if priority_group is not None:
            pulumi.set(__self__, "priority_group", priority_group)
        if share_nodes is not None:
            pulumi.set(__self__, "share_nodes", share_nodes)

    @property
    @pulumi.getter
    def addresses(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        List of server address to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "addresses")

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

    @property
    @pulumi.getter(name="connectionLimit")
    def connection_limit(self) -> Optional[pulumi.Input[int]]:
        """
        connectionLimit value to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "connection_limit")

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

    @property
    @pulumi.getter
    def port(self) -> Optional[pulumi.Input[int]]:
        """
        port number of serviceport to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "port")

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

    @property
    @pulumi.getter(name="priorityGroup")
    def priority_group(self) -> Optional[pulumi.Input[int]]:
        """
        priorityGroup value to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "priority_group")

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

    @property
    @pulumi.getter(name="shareNodes")
    def share_nodes(self) -> Optional[pulumi.Input[bool]]:
        """
        shareNodes value to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "share_nodes")

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


@pulumi.input_type
class FastHttpsAppTlsClientProfileArgs:
    def __init__(__self__, *,
                 tls_cert_name: pulumi.Input[str],
                 tls_key_name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] tls_cert_name: Name of existing BIG-IP SSL certificate to be used for FAST-Generated TLS Server Profile.
        :param pulumi.Input[str] tls_key_name: Name of existing BIG-IP SSL Key to be used for FAST-Generated TLS Server Profile.
        """
        pulumi.set(__self__, "tls_cert_name", tls_cert_name)
        pulumi.set(__self__, "tls_key_name", tls_key_name)

    @property
    @pulumi.getter(name="tlsCertName")
    def tls_cert_name(self) -> pulumi.Input[str]:
        """
        Name of existing BIG-IP SSL certificate to be used for FAST-Generated TLS Server Profile.
        """
        return pulumi.get(self, "tls_cert_name")

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

    @property
    @pulumi.getter(name="tlsKeyName")
    def tls_key_name(self) -> pulumi.Input[str]:
        """
        Name of existing BIG-IP SSL Key to be used for FAST-Generated TLS Server Profile.
        """
        return pulumi.get(self, "tls_key_name")

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


@pulumi.input_type
class FastHttpsAppTlsServerProfileArgs:
    def __init__(__self__, *,
                 tls_cert_name: pulumi.Input[str],
                 tls_key_name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] tls_cert_name: Name of existing BIG-IP SSL certificate to be used for FAST-Generated TLS Server Profile.
        :param pulumi.Input[str] tls_key_name: Name of existing BIG-IP SSL Key to be used for FAST-Generated TLS Server Profile.
        """
        pulumi.set(__self__, "tls_cert_name", tls_cert_name)
        pulumi.set(__self__, "tls_key_name", tls_key_name)

    @property
    @pulumi.getter(name="tlsCertName")
    def tls_cert_name(self) -> pulumi.Input[str]:
        """
        Name of existing BIG-IP SSL certificate to be used for FAST-Generated TLS Server Profile.
        """
        return pulumi.get(self, "tls_cert_name")

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

    @property
    @pulumi.getter(name="tlsKeyName")
    def tls_key_name(self) -> pulumi.Input[str]:
        """
        Name of existing BIG-IP SSL Key to be used for FAST-Generated TLS Server Profile.
        """
        return pulumi.get(self, "tls_key_name")

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


@pulumi.input_type
class FastHttpsAppVirtualServerArgs:
    def __init__(__self__, *,
                 ip: pulumi.Input[str],
                 port: pulumi.Input[int]):
        """
        :param pulumi.Input[str] ip: IP4/IPv6 address to be used for virtual server ex: `10.1.1.1`
        :param pulumi.Input[int] port: Port number to used for accessing virtual server/application
        """
        pulumi.set(__self__, "ip", ip)
        pulumi.set(__self__, "port", port)

    @property
    @pulumi.getter
    def ip(self) -> pulumi.Input[str]:
        """
        IP4/IPv6 address to be used for virtual server ex: `10.1.1.1`
        """
        return pulumi.get(self, "ip")

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

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[int]:
        """
        Port number to used for accessing virtual server/application
        """
        return pulumi.get(self, "port")

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


@pulumi.input_type
class FastHttpsAppWafSecurityPolicyArgs:
    def __init__(__self__, *,
                 enable: pulumi.Input[bool]):
        """
        :param pulumi.Input[bool] enable: Setting `true` will enable FAST to create WAF Security Policy.
        """
        pulumi.set(__self__, "enable", enable)

    @property
    @pulumi.getter
    def enable(self) -> pulumi.Input[bool]:
        """
        Setting `true` will enable FAST to create WAF Security Policy.
        """
        return pulumi.get(self, "enable")

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


@pulumi.input_type
class FastTcpAppMonitorArgs:
    def __init__(__self__, *,
                 interval: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] interval: Set the time between health checks,in seconds for FAST-Generated Pool Monitor.
        """
        if interval is not None:
            pulumi.set(__self__, "interval", interval)

    @property
    @pulumi.getter
    def interval(self) -> Optional[pulumi.Input[int]]:
        """
        Set the time between health checks,in seconds for FAST-Generated Pool Monitor.
        """
        return pulumi.get(self, "interval")

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


@pulumi.input_type
class FastTcpAppPoolMemberArgs:
    def __init__(__self__, *,
                 addresses: pulumi.Input[Sequence[pulumi.Input[str]]],
                 connection_limit: Optional[pulumi.Input[int]] = None,
                 port: Optional[pulumi.Input[int]] = None,
                 priority_group: Optional[pulumi.Input[int]] = None,
                 share_nodes: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] addresses: List of server address to be used for FAST-Generated Pool.
        :param pulumi.Input[int] connection_limit: connectionLimit value to be used for FAST-Generated Pool.
        :param pulumi.Input[int] port: port number of serviceport to be used for FAST-Generated Pool.
        :param pulumi.Input[int] priority_group: priorityGroup value to be used for FAST-Generated Pool.
        :param pulumi.Input[bool] share_nodes: shareNodes value to be used for FAST-Generated Pool.
        """
        pulumi.set(__self__, "addresses", addresses)
        if connection_limit is not None:
            pulumi.set(__self__, "connection_limit", connection_limit)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if priority_group is not None:
            pulumi.set(__self__, "priority_group", priority_group)
        if share_nodes is not None:
            pulumi.set(__self__, "share_nodes", share_nodes)

    @property
    @pulumi.getter
    def addresses(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        List of server address to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "addresses")

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

    @property
    @pulumi.getter(name="connectionLimit")
    def connection_limit(self) -> Optional[pulumi.Input[int]]:
        """
        connectionLimit value to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "connection_limit")

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

    @property
    @pulumi.getter
    def port(self) -> Optional[pulumi.Input[int]]:
        """
        port number of serviceport to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "port")

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

    @property
    @pulumi.getter(name="priorityGroup")
    def priority_group(self) -> Optional[pulumi.Input[int]]:
        """
        priorityGroup value to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "priority_group")

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

    @property
    @pulumi.getter(name="shareNodes")
    def share_nodes(self) -> Optional[pulumi.Input[bool]]:
        """
        shareNodes value to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "share_nodes")

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


@pulumi.input_type
class FastTcpAppVirtualServerArgs:
    def __init__(__self__, *,
                 ip: pulumi.Input[str],
                 port: pulumi.Input[int]):
        """
        :param pulumi.Input[str] ip: IP4/IPv6 address to be used for virtual server ex: `10.1.1.1`
        :param pulumi.Input[int] port: Port number to used for accessing virtual server/application
        """
        pulumi.set(__self__, "ip", ip)
        pulumi.set(__self__, "port", port)

    @property
    @pulumi.getter
    def ip(self) -> pulumi.Input[str]:
        """
        IP4/IPv6 address to be used for virtual server ex: `10.1.1.1`
        """
        return pulumi.get(self, "ip")

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

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[int]:
        """
        Port number to used for accessing virtual server/application
        """
        return pulumi.get(self, "port")

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


@pulumi.input_type
class FastUdpAppMonitorArgs:
    def __init__(__self__, *,
                 expected_response: Optional[pulumi.Input[str]] = None,
                 interval: Optional[pulumi.Input[int]] = None,
                 send_string: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] expected_response: The presence of this optional string is required in the response, if specified it confirms availability.
        :param pulumi.Input[int] interval: Set the time between health checks,in seconds for FAST-Generated Pool Monitor.
        :param pulumi.Input[str] send_string: Optional data to be sent during each health check.
        """
        if expected_response is not None:
            pulumi.set(__self__, "expected_response", expected_response)
        if interval is not None:
            pulumi.set(__self__, "interval", interval)
        if send_string is not None:
            pulumi.set(__self__, "send_string", send_string)

    @property
    @pulumi.getter(name="expectedResponse")
    def expected_response(self) -> Optional[pulumi.Input[str]]:
        """
        The presence of this optional string is required in the response, if specified it confirms availability.
        """
        return pulumi.get(self, "expected_response")

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

    @property
    @pulumi.getter
    def interval(self) -> Optional[pulumi.Input[int]]:
        """
        Set the time between health checks,in seconds for FAST-Generated Pool Monitor.
        """
        return pulumi.get(self, "interval")

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

    @property
    @pulumi.getter(name="sendString")
    def send_string(self) -> Optional[pulumi.Input[str]]:
        """
        Optional data to be sent during each health check.
        """
        return pulumi.get(self, "send_string")

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


@pulumi.input_type
class FastUdpAppPoolMemberArgs:
    def __init__(__self__, *,
                 addresses: pulumi.Input[Sequence[pulumi.Input[str]]],
                 connection_limit: Optional[pulumi.Input[int]] = None,
                 port: Optional[pulumi.Input[int]] = None,
                 priority_group: Optional[pulumi.Input[int]] = None,
                 share_nodes: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] addresses: List of server address to be used for FAST-Generated Pool.
        :param pulumi.Input[int] connection_limit: connectionLimit value to be used for FAST-Generated Pool.
        :param pulumi.Input[int] port: port number of serviceport to be used for FAST-Generated Pool.
        :param pulumi.Input[int] priority_group: priorityGroup value to be used for FAST-Generated Pool.
        :param pulumi.Input[bool] share_nodes: shareNodes value to be used for FAST-Generated Pool.
        """
        pulumi.set(__self__, "addresses", addresses)
        if connection_limit is not None:
            pulumi.set(__self__, "connection_limit", connection_limit)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if priority_group is not None:
            pulumi.set(__self__, "priority_group", priority_group)
        if share_nodes is not None:
            pulumi.set(__self__, "share_nodes", share_nodes)

    @property
    @pulumi.getter
    def addresses(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        List of server address to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "addresses")

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

    @property
    @pulumi.getter(name="connectionLimit")
    def connection_limit(self) -> Optional[pulumi.Input[int]]:
        """
        connectionLimit value to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "connection_limit")

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

    @property
    @pulumi.getter
    def port(self) -> Optional[pulumi.Input[int]]:
        """
        port number of serviceport to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "port")

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

    @property
    @pulumi.getter(name="priorityGroup")
    def priority_group(self) -> Optional[pulumi.Input[int]]:
        """
        priorityGroup value to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "priority_group")

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

    @property
    @pulumi.getter(name="shareNodes")
    def share_nodes(self) -> Optional[pulumi.Input[bool]]:
        """
        shareNodes value to be used for FAST-Generated Pool.
        """
        return pulumi.get(self, "share_nodes")

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


@pulumi.input_type
class FastUdpAppVirtualServerArgs:
    def __init__(__self__, *,
                 ip: pulumi.Input[str],
                 port: pulumi.Input[int]):
        """
        :param pulumi.Input[str] ip: IP4/IPv6 address to be used for virtual server ex: `10.1.1.1`
        :param pulumi.Input[int] port: Port number to used for accessing virtual server/application
        """
        pulumi.set(__self__, "ip", ip)
        pulumi.set(__self__, "port", port)

    @property
    @pulumi.getter
    def ip(self) -> pulumi.Input[str]:
        """
        IP4/IPv6 address to be used for virtual server ex: `10.1.1.1`
        """
        return pulumi.get(self, "ip")

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

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[int]:
        """
        Port number to used for accessing virtual server/application
        """
        return pulumi.get(self, "port")

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


@pulumi.input_type
class WafPolicyFileTypeArgs:
    def __init__(__self__, *,
                 allowed: Optional[pulumi.Input[bool]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] allowed: Determines whether the file type is allowed or disallowed. In either of these cases the VIOL_FILETYPE violation is issued (if enabled) for an incoming request- 
               * No allowed file type matched the file type of the request.
               * The file type of the request matched a disallowed file type.
        :param pulumi.Input[str] name: Specifies the file type name as appearing in the URL extension.
        :param pulumi.Input[str] type: Determines the type of the name attribute. Only when setting the type to `wildcard` will the special wildcard characters in the name be interpreted as such
        """
        if allowed is not None:
            pulumi.set(__self__, "allowed", allowed)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if type is not None:
            pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def allowed(self) -> Optional[pulumi.Input[bool]]:
        """
        Determines whether the file type is allowed or disallowed. In either of these cases the VIOL_FILETYPE violation is issued (if enabled) for an incoming request- 
        * No allowed file type matched the file type of the request.
        * The file type of the request matched a disallowed file type.
        """
        return pulumi.get(self, "allowed")

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

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies the file type name as appearing in the URL extension.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def type(self) -> Optional[pulumi.Input[str]]:
        """
        Determines the type of the name attribute. Only when setting the type to `wildcard` will the special wildcard characters in the name be interpreted as such
        """
        return pulumi.get(self, "type")

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


@pulumi.input_type
class WafPolicyGraphqlProfileArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 attack_signatures_check: Optional[pulumi.Input[bool]] = None,
                 defense_attributes: Optional[pulumi.Input[Sequence[pulumi.Input['WafPolicyGraphqlProfileDefenseAttributeArgs']]]] = None,
                 metachar_elementcheck: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] name: The unique user-given name of the policy. Policy names cannot contain spaces or special characters. Allowed characters are a-z, A-Z, 0-9, dot, dash (-), colon (:) and underscore (_).
        :param pulumi.Input[bool] attack_signatures_check: Specifies when checked (enabled) that you want attack signatures and threat campaigns to be detected on this GraphQL profile and possibly override the security policy settings of an attack signature or threat campaign specifically for this GraphQL profile. After you enable this setting, the system displays a list of attack signatures and and threat campaigns. The default is enabled.
        :param pulumi.Input[Sequence[pulumi.Input['WafPolicyGraphqlProfileDefenseAttributeArgs']]] defense_attributes: `defense_attributes` block settings for GraphQl policy.See defense attributes below for more details.
        :param pulumi.Input[bool] metachar_elementcheck: Specifies when checked (enabled) that the system enforces the security policy settings of a meta character for the GraphQL profile. After you enable this setting, the system displays a list of meta characters. The default is enabled.
        """
        pulumi.set(__self__, "name", name)
        if attack_signatures_check is not None:
            pulumi.set(__self__, "attack_signatures_check", attack_signatures_check)
        if defense_attributes is not None:
            pulumi.set(__self__, "defense_attributes", defense_attributes)
        if metachar_elementcheck is not None:
            pulumi.set(__self__, "metachar_elementcheck", metachar_elementcheck)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The unique user-given name of the policy. Policy names cannot contain spaces or special characters. Allowed characters are a-z, A-Z, 0-9, dot, dash (-), colon (:) and underscore (_).
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="attackSignaturesCheck")
    def attack_signatures_check(self) -> Optional[pulumi.Input[bool]]:
        """
        Specifies when checked (enabled) that you want attack signatures and threat campaigns to be detected on this GraphQL profile and possibly override the security policy settings of an attack signature or threat campaign specifically for this GraphQL profile. After you enable this setting, the system displays a list of attack signatures and and threat campaigns. The default is enabled.
        """
        return pulumi.get(self, "attack_signatures_check")

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

    @property
    @pulumi.getter(name="defenseAttributes")
    def defense_attributes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['WafPolicyGraphqlProfileDefenseAttributeArgs']]]]:
        """
        `defense_attributes` block settings for GraphQl policy.See defense attributes below for more details.
        """
        return pulumi.get(self, "defense_attributes")

    @defense_attributes.setter
    def defense_attributes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['WafPolicyGraphqlProfileDefenseAttributeArgs']]]]):
        pulumi.set(self, "defense_attributes", value)

    @property
    @pulumi.getter(name="metacharElementcheck")
    def metachar_elementcheck(self) -> Optional[pulumi.Input[bool]]:
        """
        Specifies when checked (enabled) that the system enforces the security policy settings of a meta character for the GraphQL profile. After you enable this setting, the system displays a list of meta characters. The default is enabled.
        """
        return pulumi.get(self, "metachar_elementcheck")

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


@pulumi.input_type
class WafPolicyGraphqlProfileDefenseAttributeArgs:
    def __init__(__self__, *,
                 allow_introspection_queries: Optional[pulumi.Input[bool]] = None,
                 maximum_batched_queries: Optional[pulumi.Input[str]] = None,
                 maximum_structure_depth: Optional[pulumi.Input[str]] = None,
                 maximum_total_length: Optional[pulumi.Input[str]] = None,
                 maximum_value_length: Optional[pulumi.Input[str]] = None,
                 tolerate_parsing_warnings: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[bool] allow_introspection_queries: Introspection queries can also be enforced to prevent attackers from using them to
               understand the API structure and potentially breach an application.
        :param pulumi.Input[str] maximum_batched_queries: Specifies the highest number of batched queries allowed by the security policy.
        :param pulumi.Input[str] maximum_structure_depth: Specifies the greatest nesting depth found in the GraphQL structure allowed by the security policy.
        :param pulumi.Input[str] maximum_total_length: Specifies the longest length, in bytes, allowed by the security policy of the request payload, or parameter value, where the GraphQL data was found.
        :param pulumi.Input[str] maximum_value_length: Specifies the longest length (in bytes) of the longest GraphQL element value in the document allowed by the security policy.
        :param pulumi.Input[bool] tolerate_parsing_warnings: Specifies, when checked (enabled), that the system does not report when the security enforcer encounters warnings while parsing GraphQL content. Specifies when cleared (disabled), that the security policy reports when the security enforcer encounters warnings while parsing GraphQL content. The default setting is disabled.
        """
        if allow_introspection_queries is not None:
            pulumi.set(__self__, "allow_introspection_queries", allow_introspection_queries)
        if maximum_batched_queries is not None:
            pulumi.set(__self__, "maximum_batched_queries", maximum_batched_queries)
        if maximum_structure_depth is not None:
            pulumi.set(__self__, "maximum_structure_depth", maximum_structure_depth)
        if maximum_total_length is not None:
            pulumi.set(__self__, "maximum_total_length", maximum_total_length)
        if maximum_value_length is not None:
            pulumi.set(__self__, "maximum_value_length", maximum_value_length)
        if tolerate_parsing_warnings is not None:
            pulumi.set(__self__, "tolerate_parsing_warnings", tolerate_parsing_warnings)

    @property
    @pulumi.getter(name="allowIntrospectionQueries")
    def allow_introspection_queries(self) -> Optional[pulumi.Input[bool]]:
        """
        Introspection queries can also be enforced to prevent attackers from using them to
        understand the API structure and potentially breach an application.
        """
        return pulumi.get(self, "allow_introspection_queries")

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

    @property
    @pulumi.getter(name="maximumBatchedQueries")
    def maximum_batched_queries(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies the highest number of batched queries allowed by the security policy.
        """
        return pulumi.get(self, "maximum_batched_queries")

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

    @property
    @pulumi.getter(name="maximumStructureDepth")
    def maximum_structure_depth(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies the greatest nesting depth found in the GraphQL structure allowed by the security policy.
        """
        return pulumi.get(self, "maximum_structure_depth")

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

    @property
    @pulumi.getter(name="maximumTotalLength")
    def maximum_total_length(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies the longest length, in bytes, allowed by the security policy of the request payload, or parameter value, where the GraphQL data was found.
        """
        return pulumi.get(self, "maximum_total_length")

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

    @property
    @pulumi.getter(name="maximumValueLength")
    def maximum_value_length(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies the longest length (in bytes) of the longest GraphQL element value in the document allowed by the security policy.
        """
        return pulumi.get(self, "maximum_value_length")

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

    @property
    @pulumi.getter(name="tolerateParsingWarnings")
    def tolerate_parsing_warnings(self) -> Optional[pulumi.Input[bool]]:
        """
        Specifies, when checked (enabled), that the system does not report when the security enforcer encounters warnings while parsing GraphQL content. Specifies when cleared (disabled), that the security policy reports when the security enforcer encounters warnings while parsing GraphQL content. The default setting is disabled.
        """
        return pulumi.get(self, "tolerate_parsing_warnings")

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


@pulumi.input_type
class WafPolicyHostNameArgs:
    def __init__(__self__, *,
                 name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The unique user-given name of the policy. Policy names cannot contain spaces or special characters. Allowed characters are a-z, A-Z, 0-9, dot, dash (-), colon (:) and underscore (_).
        """
        if name is not None:
            pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        The unique user-given name of the policy. Policy names cannot contain spaces or special characters. Allowed characters are a-z, A-Z, 0-9, dot, dash (-), colon (:) and underscore (_).
        """
        return pulumi.get(self, "name")

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


@pulumi.input_type
class WafPolicyIpExceptionArgs:
    def __init__(__self__, *,
                 ip_address: pulumi.Input[str],
                 ip_mask: pulumi.Input[str],
                 block_requests: Optional[pulumi.Input[str]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 ignore_anomalies: Optional[pulumi.Input[bool]] = None,
                 ignore_ipreputation: Optional[pulumi.Input[bool]] = None,
                 trustedby_policybuilder: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] ip_address: Specifies the IP address that you want the system to trust.
        :param pulumi.Input[str] ip_mask: Specifies the netmask of the exceptional IP address. This is an optional field.
        :param pulumi.Input[str] block_requests: Specifies how the system responds to blocking requests sent from this IP address. Possible options [`always`, `never`, `policy-default`].
        :param pulumi.Input[str] description: Specifies the description of the policy.
        :param pulumi.Input[bool] ignore_anomalies: Specifies when enabled that the system considers this IP address legitimate and does not take it into account when performing brute force prevention.
        :param pulumi.Input[bool] ignore_ipreputation: Specifies when enabled that the system considers this IP address legitimate even if it is found in the IP Intelligence database (a database of questionable IP addresses).
        :param pulumi.Input[bool] trustedby_policybuilder: Specifies when enabled the Policy Builder considers traffic from this IP address as being safe.
        """
        pulumi.set(__self__, "ip_address", ip_address)
        pulumi.set(__self__, "ip_mask", ip_mask)
        if block_requests is not None:
            pulumi.set(__self__, "block_requests", block_requests)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if ignore_anomalies is not None:
            pulumi.set(__self__, "ignore_anomalies", ignore_anomalies)
        if ignore_ipreputation is not None:
            pulumi.set(__self__, "ignore_ipreputation", ignore_ipreputation)
        if trustedby_policybuilder is not None:
            pulumi.set(__self__, "trustedby_policybuilder", trustedby_policybuilder)

    @property
    @pulumi.getter(name="ipAddress")
    def ip_address(self) -> pulumi.Input[str]:
        """
        Specifies the IP address that you want the system to trust.
        """
        return pulumi.get(self, "ip_address")

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

    @property
    @pulumi.getter(name="ipMask")
    def ip_mask(self) -> pulumi.Input[str]:
        """
        Specifies the netmask of the exceptional IP address. This is an optional field.
        """
        return pulumi.get(self, "ip_mask")

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

    @property
    @pulumi.getter(name="blockRequests")
    def block_requests(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies how the system responds to blocking requests sent from this IP address. Possible options [`always`, `never`, `policy-default`].
        """
        return pulumi.get(self, "block_requests")

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

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

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

    @property
    @pulumi.getter(name="ignoreAnomalies")
    def ignore_anomalies(self) -> Optional[pulumi.Input[bool]]:
        """
        Specifies when enabled that the system considers this IP address legitimate and does not take it into account when performing brute force prevention.
        """
        return pulumi.get(self, "ignore_anomalies")

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

    @property
    @pulumi.getter(name="ignoreIpreputation")
    def ignore_ipreputation(self) -> Optional[pulumi.Input[bool]]:
        """
        Specifies when enabled that the system considers this IP address legitimate even if it is found in the IP Intelligence database (a database of questionable IP addresses).
        """
        return pulumi.get(self, "ignore_ipreputation")

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

    @property
    @pulumi.getter(name="trustedbyPolicybuilder")
    def trustedby_policybuilder(self) -> Optional[pulumi.Input[bool]]:
        """
        Specifies when enabled the Policy Builder considers traffic from this IP address as being safe.
        """
        return pulumi.get(self, "trustedby_policybuilder")

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


@pulumi.input_type
class WafPolicyPolicyBuilderArgs:
    def __init__(__self__, *,
                 learning_mode: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] learning_mode: learning mode setting for policy-builder, possible options: [`automatic`,`disabled`, `manual`]
        """
        if learning_mode is not None:
            pulumi.set(__self__, "learning_mode", learning_mode)

    @property
    @pulumi.getter(name="learningMode")
    def learning_mode(self) -> Optional[pulumi.Input[str]]:
        """
        learning mode setting for policy-builder, possible options: [`automatic`,`disabled`, `manual`]
        """
        return pulumi.get(self, "learning_mode")

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


@pulumi.input_type
class WafPolicySignaturesSettingArgs:
    def __init__(__self__, *,
                 placesignatures_in_staging: Optional[pulumi.Input[bool]] = None,
                 signature_staging: Optional[pulumi.Input[bool]] = None):
        if placesignatures_in_staging is not None:
            pulumi.set(__self__, "placesignatures_in_staging", placesignatures_in_staging)
        if signature_staging is not None:
            pulumi.set(__self__, "signature_staging", signature_staging)

    @property
    @pulumi.getter(name="placesignaturesInStaging")
    def placesignatures_in_staging(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "placesignatures_in_staging")

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

    @property
    @pulumi.getter(name="signatureStaging")
    def signature_staging(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "signature_staging")

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


