# 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 warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from .. import _utilities
from . import outputs

__all__ = [
    'DataGroupRecord',
    'NodeFqdn',
    'PolicyRule',
    'PolicyRuleAction',
    'PolicyRuleCondition',
    'ProfileClientSslCertKeyChain',
    'SnatOrigin',
    'GetDataGroupRecordResult',
    'GetNodeFqdnResult',
]

@pulumi.output_type
class DataGroupRecord(dict):
    def __init__(__self__, *,
                 name: str,
                 data: Optional[str] = None):
        """
        :param str name: , sets the value of the record's `name` attribute, must be of type defined in `type` attribute
        :param str data: , sets the value of the record's `data` attribute, specifying a value here will create a record in the form of `name := data`
        """
        pulumi.set(__self__, "name", name)
        if data is not None:
            pulumi.set(__self__, "data", data)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        , sets the value of the record's `name` attribute, must be of type defined in `type` attribute
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def data(self) -> Optional[str]:
        """
        , sets the value of the record's `data` attribute, specifying a value here will create a record in the form of `name := data`
        """
        return pulumi.get(self, "data")


@pulumi.output_type
class NodeFqdn(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "addressFamily":
            suggest = "address_family"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NodeFqdn. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NodeFqdn.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NodeFqdn.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 address_family: Optional[str] = None,
                 autopopulate: Optional[str] = None,
                 downinterval: Optional[int] = None,
                 interval: Optional[str] = None,
                 name: Optional[str] = None):
        """
        :param str address_family: Specifies the node's address family. The default is 'unspecified', or IP-agnostic. This needs to be specified inside the fqdn (fully qualified domain name).
        :param str interval: Specifies the amount of time before sending the next DNS query. Default is 3600. This needs to be specified inside the fqdn (fully qualified domain name).
        :param str name: Name of the node
        """
        if address_family is not None:
            pulumi.set(__self__, "address_family", address_family)
        if autopopulate is not None:
            pulumi.set(__self__, "autopopulate", autopopulate)
        if downinterval is not None:
            pulumi.set(__self__, "downinterval", downinterval)
        if interval is not None:
            pulumi.set(__self__, "interval", interval)
        if name is not None:
            pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="addressFamily")
    def address_family(self) -> Optional[str]:
        """
        Specifies the node's address family. The default is 'unspecified', or IP-agnostic. This needs to be specified inside the fqdn (fully qualified domain name).
        """
        return pulumi.get(self, "address_family")

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

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

    @property
    @pulumi.getter
    def interval(self) -> Optional[str]:
        """
        Specifies the amount of time before sending the next DNS query. Default is 3600. This needs to be specified inside the fqdn (fully qualified domain name).
        """
        return pulumi.get(self, "interval")

    @property
    @pulumi.getter
    def name(self) -> Optional[str]:
        """
        Name of the node
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class PolicyRule(dict):
    def __init__(__self__, *,
                 name: str,
                 actions: Optional[Sequence['outputs.PolicyRuleAction']] = None,
                 conditions: Optional[Sequence['outputs.PolicyRuleCondition']] = None):
        """
        :param str name: Name of the Policy ( policy name should be in full path which is combination of partition and policy name )
        """
        pulumi.set(__self__, "name", name)
        if actions is not None:
            pulumi.set(__self__, "actions", actions)
        if conditions is not None:
            pulumi.set(__self__, "conditions", conditions)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        Name of the Policy ( policy name should be in full path which is combination of partition and policy name )
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def actions(self) -> Optional[Sequence['outputs.PolicyRuleAction']]:
        return pulumi.get(self, "actions")

    @property
    @pulumi.getter
    def conditions(self) -> Optional[Sequence['outputs.PolicyRuleCondition']]:
        return pulumi.get(self, "conditions")


@pulumi.output_type
class PolicyRuleAction(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "appService":
            suggest = "app_service"
        elif key == "clonePool":
            suggest = "clone_pool"
        elif key == "cookieHash":
            suggest = "cookie_hash"
        elif key == "cookieInsert":
            suggest = "cookie_insert"
        elif key == "cookiePassive":
            suggest = "cookie_passive"
        elif key == "cookieRewrite":
            suggest = "cookie_rewrite"
        elif key == "destinationAddress":
            suggest = "destination_address"
        elif key == "expirySecs":
            suggest = "expiry_secs"
        elif key == "fromProfile":
            suggest = "from_profile"
        elif key == "httpBasicAuth":
            suggest = "http_basic_auth"
        elif key == "httpCookie":
            suggest = "http_cookie"
        elif key == "httpHeader":
            suggest = "http_header"
        elif key == "httpHost":
            suggest = "http_host"
        elif key == "httpReferer":
            suggest = "http_referer"
        elif key == "httpReply":
            suggest = "http_reply"
        elif key == "httpSetCookie":
            suggest = "http_set_cookie"
        elif key == "httpUri":
            suggest = "http_uri"
        elif key == "internalVirtual":
            suggest = "internal_virtual"
        elif key == "ipAddress":
            suggest = "ip_address"
        elif key == "ltmPolicy":
            suggest = "ltm_policy"
        elif key == "queryString":
            suggest = "query_string"
        elif key == "requestAdapt":
            suggest = "request_adapt"
        elif key == "responseAdapt":
            suggest = "response_adapt"
        elif key == "serverSsl":
            suggest = "server_ssl"
        elif key == "setVariable":
            suggest = "set_variable"
        elif key == "sourceAddress":
            suggest = "source_address"
        elif key == "sslClientHello":
            suggest = "ssl_client_hello"
        elif key == "sslServerHandshake":
            suggest = "ssl_server_handshake"
        elif key == "sslServerHello":
            suggest = "ssl_server_hello"
        elif key == "sslSessionId":
            suggest = "ssl_session_id"
        elif key == "tcpNagle":
            suggest = "tcp_nagle"
        elif key == "tmName":
            suggest = "tm_name"
        elif key == "vlanId":
            suggest = "vlan_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in PolicyRuleAction. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        PolicyRuleAction.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        PolicyRuleAction.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 app_service: Optional[str] = None,
                 application: Optional[str] = None,
                 asm: Optional[bool] = None,
                 avr: Optional[bool] = None,
                 cache: Optional[bool] = None,
                 carp: Optional[bool] = None,
                 category: Optional[str] = None,
                 classify: Optional[bool] = None,
                 clone_pool: Optional[str] = None,
                 code: Optional[int] = None,
                 compress: Optional[bool] = None,
                 connection: Optional[bool] = None,
                 content: Optional[str] = None,
                 cookie_hash: Optional[bool] = None,
                 cookie_insert: Optional[bool] = None,
                 cookie_passive: Optional[bool] = None,
                 cookie_rewrite: Optional[bool] = None,
                 decompress: Optional[bool] = None,
                 defer: Optional[bool] = None,
                 destination_address: Optional[bool] = None,
                 disable: Optional[bool] = None,
                 domain: Optional[str] = None,
                 enable: Optional[bool] = None,
                 expiry: Optional[str] = None,
                 expiry_secs: Optional[int] = None,
                 expression: Optional[str] = None,
                 extension: Optional[str] = None,
                 facility: Optional[str] = None,
                 forward: Optional[bool] = None,
                 from_profile: Optional[str] = None,
                 hash: Optional[bool] = None,
                 host: Optional[str] = None,
                 http: Optional[bool] = None,
                 http_basic_auth: Optional[bool] = None,
                 http_cookie: Optional[bool] = None,
                 http_header: Optional[bool] = None,
                 http_host: Optional[bool] = None,
                 http_referer: Optional[bool] = None,
                 http_reply: Optional[bool] = None,
                 http_set_cookie: Optional[bool] = None,
                 http_uri: Optional[bool] = None,
                 ifile: Optional[str] = None,
                 insert: Optional[bool] = None,
                 internal_virtual: Optional[str] = None,
                 ip_address: Optional[str] = None,
                 key: Optional[str] = None,
                 l7dos: Optional[bool] = None,
                 length: Optional[int] = None,
                 location: Optional[str] = None,
                 log: Optional[bool] = None,
                 ltm_policy: Optional[bool] = None,
                 member: Optional[str] = None,
                 message: Optional[str] = None,
                 netmask: Optional[str] = None,
                 nexthop: Optional[str] = None,
                 node: Optional[str] = None,
                 offset: Optional[int] = None,
                 path: Optional[str] = None,
                 pem: Optional[bool] = None,
                 persist: Optional[bool] = None,
                 pin: Optional[bool] = None,
                 policy: Optional[str] = None,
                 pool: Optional[str] = None,
                 port: Optional[int] = None,
                 priority: Optional[str] = None,
                 profile: Optional[str] = None,
                 protocol: Optional[str] = None,
                 query_string: Optional[str] = None,
                 rateclass: Optional[str] = None,
                 redirect: Optional[bool] = None,
                 remove: Optional[bool] = None,
                 replace: Optional[bool] = None,
                 request: Optional[bool] = None,
                 request_adapt: Optional[bool] = None,
                 reset: Optional[bool] = None,
                 response: Optional[bool] = None,
                 response_adapt: Optional[bool] = None,
                 scheme: Optional[str] = None,
                 script: Optional[str] = None,
                 select: Optional[bool] = None,
                 server_ssl: Optional[bool] = None,
                 set_variable: Optional[bool] = None,
                 shutdown: Optional[bool] = None,
                 snat: Optional[str] = None,
                 snatpool: Optional[str] = None,
                 source_address: Optional[bool] = None,
                 ssl_client_hello: Optional[bool] = None,
                 ssl_server_handshake: Optional[bool] = None,
                 ssl_server_hello: Optional[bool] = None,
                 ssl_session_id: Optional[bool] = None,
                 status: Optional[int] = None,
                 tcl: Optional[bool] = None,
                 tcp_nagle: Optional[bool] = None,
                 text: Optional[str] = None,
                 timeout: Optional[int] = None,
                 tm_name: Optional[str] = None,
                 uie: Optional[bool] = None,
                 universal: Optional[bool] = None,
                 value: Optional[str] = None,
                 virtual: Optional[str] = None,
                 vlan: Optional[str] = None,
                 vlan_id: Optional[int] = None,
                 wam: Optional[bool] = None,
                 write: Optional[bool] = None):
        """
        :param bool forward: This action will affect forwarding.
        :param str pool: This action will direct the stream to this pool.
        """
        if app_service is not None:
            pulumi.set(__self__, "app_service", app_service)
        if application is not None:
            pulumi.set(__self__, "application", application)
        if asm is not None:
            pulumi.set(__self__, "asm", asm)
        if avr is not None:
            pulumi.set(__self__, "avr", avr)
        if cache is not None:
            pulumi.set(__self__, "cache", cache)
        if carp is not None:
            pulumi.set(__self__, "carp", carp)
        if category is not None:
            pulumi.set(__self__, "category", category)
        if classify is not None:
            pulumi.set(__self__, "classify", classify)
        if clone_pool is not None:
            pulumi.set(__self__, "clone_pool", clone_pool)
        if code is not None:
            pulumi.set(__self__, "code", code)
        if compress is not None:
            pulumi.set(__self__, "compress", compress)
        if connection is not None:
            pulumi.set(__self__, "connection", connection)
        if content is not None:
            pulumi.set(__self__, "content", content)
        if cookie_hash is not None:
            pulumi.set(__self__, "cookie_hash", cookie_hash)
        if cookie_insert is not None:
            pulumi.set(__self__, "cookie_insert", cookie_insert)
        if cookie_passive is not None:
            pulumi.set(__self__, "cookie_passive", cookie_passive)
        if cookie_rewrite is not None:
            pulumi.set(__self__, "cookie_rewrite", cookie_rewrite)
        if decompress is not None:
            pulumi.set(__self__, "decompress", decompress)
        if defer is not None:
            pulumi.set(__self__, "defer", defer)
        if destination_address is not None:
            pulumi.set(__self__, "destination_address", destination_address)
        if disable is not None:
            pulumi.set(__self__, "disable", disable)
        if domain is not None:
            pulumi.set(__self__, "domain", domain)
        if enable is not None:
            pulumi.set(__self__, "enable", enable)
        if expiry is not None:
            pulumi.set(__self__, "expiry", expiry)
        if expiry_secs is not None:
            pulumi.set(__self__, "expiry_secs", expiry_secs)
        if expression is not None:
            pulumi.set(__self__, "expression", expression)
        if extension is not None:
            pulumi.set(__self__, "extension", extension)
        if facility is not None:
            pulumi.set(__self__, "facility", facility)
        if forward is not None:
            pulumi.set(__self__, "forward", forward)
        if from_profile is not None:
            pulumi.set(__self__, "from_profile", from_profile)
        if hash is not None:
            pulumi.set(__self__, "hash", hash)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if http is not None:
            pulumi.set(__self__, "http", http)
        if http_basic_auth is not None:
            pulumi.set(__self__, "http_basic_auth", http_basic_auth)
        if http_cookie is not None:
            pulumi.set(__self__, "http_cookie", http_cookie)
        if http_header is not None:
            pulumi.set(__self__, "http_header", http_header)
        if http_host is not None:
            pulumi.set(__self__, "http_host", http_host)
        if http_referer is not None:
            pulumi.set(__self__, "http_referer", http_referer)
        if http_reply is not None:
            pulumi.set(__self__, "http_reply", http_reply)
        if http_set_cookie is not None:
            pulumi.set(__self__, "http_set_cookie", http_set_cookie)
        if http_uri is not None:
            pulumi.set(__self__, "http_uri", http_uri)
        if ifile is not None:
            pulumi.set(__self__, "ifile", ifile)
        if insert is not None:
            pulumi.set(__self__, "insert", insert)
        if internal_virtual is not None:
            pulumi.set(__self__, "internal_virtual", internal_virtual)
        if ip_address is not None:
            pulumi.set(__self__, "ip_address", ip_address)
        if key is not None:
            pulumi.set(__self__, "key", key)
        if l7dos is not None:
            pulumi.set(__self__, "l7dos", l7dos)
        if length is not None:
            pulumi.set(__self__, "length", length)
        if location is not None:
            pulumi.set(__self__, "location", location)
        if log is not None:
            pulumi.set(__self__, "log", log)
        if ltm_policy is not None:
            pulumi.set(__self__, "ltm_policy", ltm_policy)
        if member is not None:
            pulumi.set(__self__, "member", member)
        if message is not None:
            pulumi.set(__self__, "message", message)
        if netmask is not None:
            pulumi.set(__self__, "netmask", netmask)
        if nexthop is not None:
            pulumi.set(__self__, "nexthop", nexthop)
        if node is not None:
            pulumi.set(__self__, "node", node)
        if offset is not None:
            pulumi.set(__self__, "offset", offset)
        if path is not None:
            pulumi.set(__self__, "path", path)
        if pem is not None:
            pulumi.set(__self__, "pem", pem)
        if persist is not None:
            pulumi.set(__self__, "persist", persist)
        if pin is not None:
            pulumi.set(__self__, "pin", pin)
        if policy is not None:
            pulumi.set(__self__, "policy", policy)
        if pool is not None:
            pulumi.set(__self__, "pool", pool)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if priority is not None:
            pulumi.set(__self__, "priority", priority)
        if profile is not None:
            pulumi.set(__self__, "profile", profile)
        if protocol is not None:
            pulumi.set(__self__, "protocol", protocol)
        if query_string is not None:
            pulumi.set(__self__, "query_string", query_string)
        if rateclass is not None:
            pulumi.set(__self__, "rateclass", rateclass)
        if redirect is not None:
            pulumi.set(__self__, "redirect", redirect)
        if remove is not None:
            pulumi.set(__self__, "remove", remove)
        if replace is not None:
            pulumi.set(__self__, "replace", replace)
        if request is not None:
            pulumi.set(__self__, "request", request)
        if request_adapt is not None:
            pulumi.set(__self__, "request_adapt", request_adapt)
        if reset is not None:
            pulumi.set(__self__, "reset", reset)
        if response is not None:
            pulumi.set(__self__, "response", response)
        if response_adapt is not None:
            pulumi.set(__self__, "response_adapt", response_adapt)
        if scheme is not None:
            pulumi.set(__self__, "scheme", scheme)
        if script is not None:
            pulumi.set(__self__, "script", script)
        if select is not None:
            pulumi.set(__self__, "select", select)
        if server_ssl is not None:
            pulumi.set(__self__, "server_ssl", server_ssl)
        if set_variable is not None:
            pulumi.set(__self__, "set_variable", set_variable)
        if shutdown is not None:
            pulumi.set(__self__, "shutdown", shutdown)
        if snat is not None:
            pulumi.set(__self__, "snat", snat)
        if snatpool is not None:
            pulumi.set(__self__, "snatpool", snatpool)
        if source_address is not None:
            pulumi.set(__self__, "source_address", source_address)
        if ssl_client_hello is not None:
            pulumi.set(__self__, "ssl_client_hello", ssl_client_hello)
        if ssl_server_handshake is not None:
            pulumi.set(__self__, "ssl_server_handshake", ssl_server_handshake)
        if ssl_server_hello is not None:
            pulumi.set(__self__, "ssl_server_hello", ssl_server_hello)
        if ssl_session_id is not None:
            pulumi.set(__self__, "ssl_session_id", ssl_session_id)
        if status is not None:
            pulumi.set(__self__, "status", status)
        if tcl is not None:
            pulumi.set(__self__, "tcl", tcl)
        if tcp_nagle is not None:
            pulumi.set(__self__, "tcp_nagle", tcp_nagle)
        if text is not None:
            pulumi.set(__self__, "text", text)
        if timeout is not None:
            pulumi.set(__self__, "timeout", timeout)
        if tm_name is not None:
            pulumi.set(__self__, "tm_name", tm_name)
        if uie is not None:
            pulumi.set(__self__, "uie", uie)
        if universal is not None:
            pulumi.set(__self__, "universal", universal)
        if value is not None:
            pulumi.set(__self__, "value", value)
        if virtual is not None:
            pulumi.set(__self__, "virtual", virtual)
        if vlan is not None:
            pulumi.set(__self__, "vlan", vlan)
        if vlan_id is not None:
            pulumi.set(__self__, "vlan_id", vlan_id)
        if wam is not None:
            pulumi.set(__self__, "wam", wam)
        if write is not None:
            pulumi.set(__self__, "write", write)

    @property
    @pulumi.getter(name="appService")
    def app_service(self) -> Optional[str]:
        return pulumi.get(self, "app_service")

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

    @property
    @pulumi.getter
    def asm(self) -> Optional[bool]:
        return pulumi.get(self, "asm")

    @property
    @pulumi.getter
    def avr(self) -> Optional[bool]:
        return pulumi.get(self, "avr")

    @property
    @pulumi.getter
    def cache(self) -> Optional[bool]:
        return pulumi.get(self, "cache")

    @property
    @pulumi.getter
    def carp(self) -> Optional[bool]:
        return pulumi.get(self, "carp")

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

    @property
    @pulumi.getter
    def classify(self) -> Optional[bool]:
        return pulumi.get(self, "classify")

    @property
    @pulumi.getter(name="clonePool")
    def clone_pool(self) -> Optional[str]:
        return pulumi.get(self, "clone_pool")

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

    @property
    @pulumi.getter
    def compress(self) -> Optional[bool]:
        return pulumi.get(self, "compress")

    @property
    @pulumi.getter
    def connection(self) -> Optional[bool]:
        return pulumi.get(self, "connection")

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

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

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

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

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

    @property
    @pulumi.getter
    def decompress(self) -> Optional[bool]:
        return pulumi.get(self, "decompress")

    @property
    @pulumi.getter
    def defer(self) -> Optional[bool]:
        return pulumi.get(self, "defer")

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

    @property
    @pulumi.getter
    def disable(self) -> Optional[bool]:
        return pulumi.get(self, "disable")

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

    @property
    @pulumi.getter
    def enable(self) -> Optional[bool]:
        return pulumi.get(self, "enable")

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

    @property
    @pulumi.getter(name="expirySecs")
    def expiry_secs(self) -> Optional[int]:
        return pulumi.get(self, "expiry_secs")

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

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

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

    @property
    @pulumi.getter
    def forward(self) -> Optional[bool]:
        """
        This action will affect forwarding.
        """
        return pulumi.get(self, "forward")

    @property
    @pulumi.getter(name="fromProfile")
    def from_profile(self) -> Optional[str]:
        return pulumi.get(self, "from_profile")

    @property
    @pulumi.getter
    def hash(self) -> Optional[bool]:
        return pulumi.get(self, "hash")

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

    @property
    @pulumi.getter
    def http(self) -> Optional[bool]:
        return pulumi.get(self, "http")

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

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

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

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

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

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

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

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

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

    @property
    @pulumi.getter
    def insert(self) -> Optional[bool]:
        return pulumi.get(self, "insert")

    @property
    @pulumi.getter(name="internalVirtual")
    def internal_virtual(self) -> Optional[str]:
        return pulumi.get(self, "internal_virtual")

    @property
    @pulumi.getter(name="ipAddress")
    def ip_address(self) -> Optional[str]:
        return pulumi.get(self, "ip_address")

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

    @property
    @pulumi.getter
    def l7dos(self) -> Optional[bool]:
        return pulumi.get(self, "l7dos")

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

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

    @property
    @pulumi.getter
    def log(self) -> Optional[bool]:
        return pulumi.get(self, "log")

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

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

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

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

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

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

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

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

    @property
    @pulumi.getter
    def pem(self) -> Optional[bool]:
        return pulumi.get(self, "pem")

    @property
    @pulumi.getter
    def persist(self) -> Optional[bool]:
        return pulumi.get(self, "persist")

    @property
    @pulumi.getter
    def pin(self) -> Optional[bool]:
        return pulumi.get(self, "pin")

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

    @property
    @pulumi.getter
    def pool(self) -> Optional[str]:
        """
        This action will direct the stream to this pool.
        """
        return pulumi.get(self, "pool")

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

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

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

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

    @property
    @pulumi.getter(name="queryString")
    def query_string(self) -> Optional[str]:
        return pulumi.get(self, "query_string")

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

    @property
    @pulumi.getter
    def redirect(self) -> Optional[bool]:
        return pulumi.get(self, "redirect")

    @property
    @pulumi.getter
    def remove(self) -> Optional[bool]:
        return pulumi.get(self, "remove")

    @property
    @pulumi.getter
    def replace(self) -> Optional[bool]:
        return pulumi.get(self, "replace")

    @property
    @pulumi.getter
    def request(self) -> Optional[bool]:
        return pulumi.get(self, "request")

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

    @property
    @pulumi.getter
    def reset(self) -> Optional[bool]:
        return pulumi.get(self, "reset")

    @property
    @pulumi.getter
    def response(self) -> Optional[bool]:
        return pulumi.get(self, "response")

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

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

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

    @property
    @pulumi.getter
    def select(self) -> Optional[bool]:
        return pulumi.get(self, "select")

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

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

    @property
    @pulumi.getter
    def shutdown(self) -> Optional[bool]:
        return pulumi.get(self, "shutdown")

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

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

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

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

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

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

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

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

    @property
    @pulumi.getter
    def tcl(self) -> Optional[bool]:
        return pulumi.get(self, "tcl")

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

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

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

    @property
    @pulumi.getter(name="tmName")
    def tm_name(self) -> Optional[str]:
        return pulumi.get(self, "tm_name")

    @property
    @pulumi.getter
    def uie(self) -> Optional[bool]:
        return pulumi.get(self, "uie")

    @property
    @pulumi.getter
    def universal(self) -> Optional[bool]:
        return pulumi.get(self, "universal")

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

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

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

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> Optional[int]:
        return pulumi.get(self, "vlan_id")

    @property
    @pulumi.getter
    def wam(self) -> Optional[bool]:
        return pulumi.get(self, "wam")

    @property
    @pulumi.getter
    def write(self) -> Optional[bool]:
        return pulumi.get(self, "write")


@pulumi.output_type
class PolicyRuleCondition(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "appService":
            suggest = "app_service"
        elif key == "browserType":
            suggest = "browser_type"
        elif key == "browserVersion":
            suggest = "browser_version"
        elif key == "caseInsensitive":
            suggest = "case_insensitive"
        elif key == "caseSensitive":
            suggest = "case_sensitive"
        elif key == "cipherBits":
            suggest = "cipher_bits"
        elif key == "clientSsl":
            suggest = "client_ssl"
        elif key == "commonName":
            suggest = "common_name"
        elif key == "countryCode":
            suggest = "country_code"
        elif key == "countryName":
            suggest = "country_name"
        elif key == "cpuUsage":
            suggest = "cpu_usage"
        elif key == "deviceMake":
            suggest = "device_make"
        elif key == "deviceModel":
            suggest = "device_model"
        elif key == "endsWith":
            suggest = "ends_with"
        elif key == "greaterOrEqual":
            suggest = "greater_or_equal"
        elif key == "httpBasicAuth":
            suggest = "http_basic_auth"
        elif key == "httpCookie":
            suggest = "http_cookie"
        elif key == "httpHeader":
            suggest = "http_header"
        elif key == "httpHost":
            suggest = "http_host"
        elif key == "httpMethod":
            suggest = "http_method"
        elif key == "httpReferer":
            suggest = "http_referer"
        elif key == "httpSetCookie":
            suggest = "http_set_cookie"
        elif key == "httpStatus":
            suggest = "http_status"
        elif key == "httpUri":
            suggest = "http_uri"
        elif key == "httpUserAgent":
            suggest = "http_user_agent"
        elif key == "httpVersion":
            suggest = "http_version"
        elif key == "lessOrEqual":
            suggest = "less_or_equal"
        elif key == "not":
            suggest = "not_"
        elif key == "pathSegment":
            suggest = "path_segment"
        elif key == "queryParameter":
            suggest = "query_parameter"
        elif key == "queryString":
            suggest = "query_string"
        elif key == "regionCode":
            suggest = "region_code"
        elif key == "regionName":
            suggest = "region_name"
        elif key == "routeDomain":
            suggest = "route_domain"
        elif key == "serverName":
            suggest = "server_name"
        elif key == "sslCert":
            suggest = "ssl_cert"
        elif key == "sslClientHello":
            suggest = "ssl_client_hello"
        elif key == "sslExtension":
            suggest = "ssl_extension"
        elif key == "sslServerHandshake":
            suggest = "ssl_server_handshake"
        elif key == "sslServerHello":
            suggest = "ssl_server_hello"
        elif key == "startsWith":
            suggest = "starts_with"
        elif key == "tmName":
            suggest = "tm_name"
        elif key == "unnamedQueryParameter":
            suggest = "unnamed_query_parameter"
        elif key == "userAgentToken":
            suggest = "user_agent_token"
        elif key == "vlanId":
            suggest = "vlan_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in PolicyRuleCondition. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        PolicyRuleCondition.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        PolicyRuleCondition.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 address: Optional[bool] = None,
                 all: Optional[bool] = None,
                 app_service: Optional[str] = None,
                 browser_type: Optional[bool] = None,
                 browser_version: Optional[bool] = None,
                 case_insensitive: Optional[bool] = None,
                 case_sensitive: Optional[bool] = None,
                 cipher: Optional[bool] = None,
                 cipher_bits: Optional[bool] = None,
                 client_ssl: Optional[bool] = None,
                 code: Optional[bool] = None,
                 common_name: Optional[bool] = None,
                 contains: Optional[bool] = None,
                 continent: Optional[bool] = None,
                 country_code: Optional[bool] = None,
                 country_name: Optional[bool] = None,
                 cpu_usage: Optional[bool] = None,
                 device_make: Optional[bool] = None,
                 device_model: Optional[bool] = None,
                 domain: Optional[bool] = None,
                 ends_with: Optional[bool] = None,
                 equals: Optional[bool] = None,
                 expiry: Optional[bool] = None,
                 extension: Optional[bool] = None,
                 external: Optional[bool] = None,
                 geoip: Optional[bool] = None,
                 greater: Optional[bool] = None,
                 greater_or_equal: Optional[bool] = None,
                 host: Optional[bool] = None,
                 http_basic_auth: Optional[bool] = None,
                 http_cookie: Optional[bool] = None,
                 http_header: Optional[bool] = None,
                 http_host: Optional[bool] = None,
                 http_method: Optional[bool] = None,
                 http_referer: Optional[bool] = None,
                 http_set_cookie: Optional[bool] = None,
                 http_status: Optional[bool] = None,
                 http_uri: Optional[bool] = None,
                 http_user_agent: Optional[bool] = None,
                 http_version: Optional[bool] = None,
                 index: Optional[int] = None,
                 internal: Optional[bool] = None,
                 isp: Optional[bool] = None,
                 last15secs: Optional[bool] = None,
                 last1min: Optional[bool] = None,
                 last5mins: Optional[bool] = None,
                 less: Optional[bool] = None,
                 less_or_equal: Optional[bool] = None,
                 local: Optional[bool] = None,
                 major: Optional[bool] = None,
                 matches: Optional[bool] = None,
                 minor: Optional[bool] = None,
                 missing: Optional[bool] = None,
                 mss: Optional[bool] = None,
                 not_: Optional[bool] = None,
                 org: Optional[bool] = None,
                 password: Optional[bool] = None,
                 path: Optional[bool] = None,
                 path_segment: Optional[bool] = None,
                 port: Optional[bool] = None,
                 present: Optional[bool] = None,
                 protocol: Optional[bool] = None,
                 query_parameter: Optional[bool] = None,
                 query_string: Optional[bool] = None,
                 region_code: Optional[bool] = None,
                 region_name: Optional[bool] = None,
                 remote: Optional[bool] = None,
                 request: Optional[bool] = None,
                 response: Optional[bool] = None,
                 route_domain: Optional[bool] = None,
                 rtt: Optional[bool] = None,
                 scheme: Optional[bool] = None,
                 server_name: Optional[bool] = None,
                 ssl_cert: Optional[bool] = None,
                 ssl_client_hello: Optional[bool] = None,
                 ssl_extension: Optional[bool] = None,
                 ssl_server_handshake: Optional[bool] = None,
                 ssl_server_hello: Optional[bool] = None,
                 starts_with: Optional[bool] = None,
                 tcp: Optional[bool] = None,
                 text: Optional[bool] = None,
                 tm_name: Optional[str] = None,
                 unnamed_query_parameter: Optional[bool] = None,
                 user_agent_token: Optional[bool] = None,
                 username: Optional[bool] = None,
                 value: Optional[bool] = None,
                 values: Optional[Sequence[str]] = None,
                 version: Optional[bool] = None,
                 vlan: Optional[bool] = None,
                 vlan_id: Optional[bool] = None):
        if address is not None:
            pulumi.set(__self__, "address", address)
        if all is not None:
            pulumi.set(__self__, "all", all)
        if app_service is not None:
            pulumi.set(__self__, "app_service", app_service)
        if browser_type is not None:
            pulumi.set(__self__, "browser_type", browser_type)
        if browser_version is not None:
            pulumi.set(__self__, "browser_version", browser_version)
        if case_insensitive is not None:
            pulumi.set(__self__, "case_insensitive", case_insensitive)
        if case_sensitive is not None:
            pulumi.set(__self__, "case_sensitive", case_sensitive)
        if cipher is not None:
            pulumi.set(__self__, "cipher", cipher)
        if cipher_bits is not None:
            pulumi.set(__self__, "cipher_bits", cipher_bits)
        if client_ssl is not None:
            pulumi.set(__self__, "client_ssl", client_ssl)
        if code is not None:
            pulumi.set(__self__, "code", code)
        if common_name is not None:
            pulumi.set(__self__, "common_name", common_name)
        if contains is not None:
            pulumi.set(__self__, "contains", contains)
        if continent is not None:
            pulumi.set(__self__, "continent", continent)
        if country_code is not None:
            pulumi.set(__self__, "country_code", country_code)
        if country_name is not None:
            pulumi.set(__self__, "country_name", country_name)
        if cpu_usage is not None:
            pulumi.set(__self__, "cpu_usage", cpu_usage)
        if device_make is not None:
            pulumi.set(__self__, "device_make", device_make)
        if device_model is not None:
            pulumi.set(__self__, "device_model", device_model)
        if domain is not None:
            pulumi.set(__self__, "domain", domain)
        if ends_with is not None:
            pulumi.set(__self__, "ends_with", ends_with)
        if equals is not None:
            pulumi.set(__self__, "equals", equals)
        if expiry is not None:
            pulumi.set(__self__, "expiry", expiry)
        if extension is not None:
            pulumi.set(__self__, "extension", extension)
        if external is not None:
            pulumi.set(__self__, "external", external)
        if geoip is not None:
            pulumi.set(__self__, "geoip", geoip)
        if greater is not None:
            pulumi.set(__self__, "greater", greater)
        if greater_or_equal is not None:
            pulumi.set(__self__, "greater_or_equal", greater_or_equal)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if http_basic_auth is not None:
            pulumi.set(__self__, "http_basic_auth", http_basic_auth)
        if http_cookie is not None:
            pulumi.set(__self__, "http_cookie", http_cookie)
        if http_header is not None:
            pulumi.set(__self__, "http_header", http_header)
        if http_host is not None:
            pulumi.set(__self__, "http_host", http_host)
        if http_method is not None:
            pulumi.set(__self__, "http_method", http_method)
        if http_referer is not None:
            pulumi.set(__self__, "http_referer", http_referer)
        if http_set_cookie is not None:
            pulumi.set(__self__, "http_set_cookie", http_set_cookie)
        if http_status is not None:
            pulumi.set(__self__, "http_status", http_status)
        if http_uri is not None:
            pulumi.set(__self__, "http_uri", http_uri)
        if http_user_agent is not None:
            pulumi.set(__self__, "http_user_agent", http_user_agent)
        if http_version is not None:
            pulumi.set(__self__, "http_version", http_version)
        if index is not None:
            pulumi.set(__self__, "index", index)
        if internal is not None:
            pulumi.set(__self__, "internal", internal)
        if isp is not None:
            pulumi.set(__self__, "isp", isp)
        if last15secs is not None:
            pulumi.set(__self__, "last15secs", last15secs)
        if last1min is not None:
            pulumi.set(__self__, "last1min", last1min)
        if last5mins is not None:
            pulumi.set(__self__, "last5mins", last5mins)
        if less is not None:
            pulumi.set(__self__, "less", less)
        if less_or_equal is not None:
            pulumi.set(__self__, "less_or_equal", less_or_equal)
        if local is not None:
            pulumi.set(__self__, "local", local)
        if major is not None:
            pulumi.set(__self__, "major", major)
        if matches is not None:
            pulumi.set(__self__, "matches", matches)
        if minor is not None:
            pulumi.set(__self__, "minor", minor)
        if missing is not None:
            pulumi.set(__self__, "missing", missing)
        if mss is not None:
            pulumi.set(__self__, "mss", mss)
        if not_ is not None:
            pulumi.set(__self__, "not_", not_)
        if org is not None:
            pulumi.set(__self__, "org", org)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if path is not None:
            pulumi.set(__self__, "path", path)
        if path_segment is not None:
            pulumi.set(__self__, "path_segment", path_segment)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if present is not None:
            pulumi.set(__self__, "present", present)
        if protocol is not None:
            pulumi.set(__self__, "protocol", protocol)
        if query_parameter is not None:
            pulumi.set(__self__, "query_parameter", query_parameter)
        if query_string is not None:
            pulumi.set(__self__, "query_string", query_string)
        if region_code is not None:
            pulumi.set(__self__, "region_code", region_code)
        if region_name is not None:
            pulumi.set(__self__, "region_name", region_name)
        if remote is not None:
            pulumi.set(__self__, "remote", remote)
        if request is not None:
            pulumi.set(__self__, "request", request)
        if response is not None:
            pulumi.set(__self__, "response", response)
        if route_domain is not None:
            pulumi.set(__self__, "route_domain", route_domain)
        if rtt is not None:
            pulumi.set(__self__, "rtt", rtt)
        if scheme is not None:
            pulumi.set(__self__, "scheme", scheme)
        if server_name is not None:
            pulumi.set(__self__, "server_name", server_name)
        if ssl_cert is not None:
            pulumi.set(__self__, "ssl_cert", ssl_cert)
        if ssl_client_hello is not None:
            pulumi.set(__self__, "ssl_client_hello", ssl_client_hello)
        if ssl_extension is not None:
            pulumi.set(__self__, "ssl_extension", ssl_extension)
        if ssl_server_handshake is not None:
            pulumi.set(__self__, "ssl_server_handshake", ssl_server_handshake)
        if ssl_server_hello is not None:
            pulumi.set(__self__, "ssl_server_hello", ssl_server_hello)
        if starts_with is not None:
            pulumi.set(__self__, "starts_with", starts_with)
        if tcp is not None:
            pulumi.set(__self__, "tcp", tcp)
        if text is not None:
            pulumi.set(__self__, "text", text)
        if tm_name is not None:
            pulumi.set(__self__, "tm_name", tm_name)
        if unnamed_query_parameter is not None:
            pulumi.set(__self__, "unnamed_query_parameter", unnamed_query_parameter)
        if user_agent_token is not None:
            pulumi.set(__self__, "user_agent_token", user_agent_token)
        if username is not None:
            pulumi.set(__self__, "username", username)
        if value is not None:
            pulumi.set(__self__, "value", value)
        if values is not None:
            pulumi.set(__self__, "values", values)
        if version is not None:
            pulumi.set(__self__, "version", version)
        if vlan is not None:
            pulumi.set(__self__, "vlan", vlan)
        if vlan_id is not None:
            pulumi.set(__self__, "vlan_id", vlan_id)

    @property
    @pulumi.getter
    def address(self) -> Optional[bool]:
        return pulumi.get(self, "address")

    @property
    @pulumi.getter
    def all(self) -> Optional[bool]:
        return pulumi.get(self, "all")

    @property
    @pulumi.getter(name="appService")
    def app_service(self) -> Optional[str]:
        return pulumi.get(self, "app_service")

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

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

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

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

    @property
    @pulumi.getter
    def cipher(self) -> Optional[bool]:
        return pulumi.get(self, "cipher")

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

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

    @property
    @pulumi.getter
    def code(self) -> Optional[bool]:
        return pulumi.get(self, "code")

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

    @property
    @pulumi.getter
    def contains(self) -> Optional[bool]:
        return pulumi.get(self, "contains")

    @property
    @pulumi.getter
    def continent(self) -> Optional[bool]:
        return pulumi.get(self, "continent")

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

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

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

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

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

    @property
    @pulumi.getter
    def domain(self) -> Optional[bool]:
        return pulumi.get(self, "domain")

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

    @property
    @pulumi.getter
    def equals(self) -> Optional[bool]:
        return pulumi.get(self, "equals")

    @property
    @pulumi.getter
    def expiry(self) -> Optional[bool]:
        return pulumi.get(self, "expiry")

    @property
    @pulumi.getter
    def extension(self) -> Optional[bool]:
        return pulumi.get(self, "extension")

    @property
    @pulumi.getter
    def external(self) -> Optional[bool]:
        return pulumi.get(self, "external")

    @property
    @pulumi.getter
    def geoip(self) -> Optional[bool]:
        return pulumi.get(self, "geoip")

    @property
    @pulumi.getter
    def greater(self) -> Optional[bool]:
        return pulumi.get(self, "greater")

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

    @property
    @pulumi.getter
    def host(self) -> Optional[bool]:
        return pulumi.get(self, "host")

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

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

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

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

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

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

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

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

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

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

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

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

    @property
    @pulumi.getter
    def internal(self) -> Optional[bool]:
        return pulumi.get(self, "internal")

    @property
    @pulumi.getter
    def isp(self) -> Optional[bool]:
        return pulumi.get(self, "isp")

    @property
    @pulumi.getter
    def last15secs(self) -> Optional[bool]:
        return pulumi.get(self, "last15secs")

    @property
    @pulumi.getter
    def last1min(self) -> Optional[bool]:
        return pulumi.get(self, "last1min")

    @property
    @pulumi.getter
    def last5mins(self) -> Optional[bool]:
        return pulumi.get(self, "last5mins")

    @property
    @pulumi.getter
    def less(self) -> Optional[bool]:
        return pulumi.get(self, "less")

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

    @property
    @pulumi.getter
    def local(self) -> Optional[bool]:
        return pulumi.get(self, "local")

    @property
    @pulumi.getter
    def major(self) -> Optional[bool]:
        return pulumi.get(self, "major")

    @property
    @pulumi.getter
    def matches(self) -> Optional[bool]:
        return pulumi.get(self, "matches")

    @property
    @pulumi.getter
    def minor(self) -> Optional[bool]:
        return pulumi.get(self, "minor")

    @property
    @pulumi.getter
    def missing(self) -> Optional[bool]:
        return pulumi.get(self, "missing")

    @property
    @pulumi.getter
    def mss(self) -> Optional[bool]:
        return pulumi.get(self, "mss")

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

    @property
    @pulumi.getter
    def org(self) -> Optional[bool]:
        return pulumi.get(self, "org")

    @property
    @pulumi.getter
    def password(self) -> Optional[bool]:
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def path(self) -> Optional[bool]:
        return pulumi.get(self, "path")

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

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

    @property
    @pulumi.getter
    def present(self) -> Optional[bool]:
        return pulumi.get(self, "present")

    @property
    @pulumi.getter
    def protocol(self) -> Optional[bool]:
        return pulumi.get(self, "protocol")

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

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

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

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

    @property
    @pulumi.getter
    def remote(self) -> Optional[bool]:
        return pulumi.get(self, "remote")

    @property
    @pulumi.getter
    def request(self) -> Optional[bool]:
        return pulumi.get(self, "request")

    @property
    @pulumi.getter
    def response(self) -> Optional[bool]:
        return pulumi.get(self, "response")

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

    @property
    @pulumi.getter
    def rtt(self) -> Optional[bool]:
        return pulumi.get(self, "rtt")

    @property
    @pulumi.getter
    def scheme(self) -> Optional[bool]:
        return pulumi.get(self, "scheme")

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

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

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

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

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

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

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

    @property
    @pulumi.getter
    def tcp(self) -> Optional[bool]:
        return pulumi.get(self, "tcp")

    @property
    @pulumi.getter
    def text(self) -> Optional[bool]:
        return pulumi.get(self, "text")

    @property
    @pulumi.getter(name="tmName")
    def tm_name(self) -> Optional[str]:
        return pulumi.get(self, "tm_name")

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

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

    @property
    @pulumi.getter
    def username(self) -> Optional[bool]:
        return pulumi.get(self, "username")

    @property
    @pulumi.getter
    def value(self) -> Optional[bool]:
        return pulumi.get(self, "value")

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

    @property
    @pulumi.getter
    def version(self) -> Optional[bool]:
        return pulumi.get(self, "version")

    @property
    @pulumi.getter
    def vlan(self) -> Optional[bool]:
        return pulumi.get(self, "vlan")

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


@pulumi.output_type
class ProfileClientSslCertKeyChain(dict):
    def __init__(__self__, *,
                 cert: Optional[str] = None,
                 chain: Optional[str] = None,
                 key: Optional[str] = None,
                 name: Optional[str] = None,
                 passphrase: Optional[str] = None):
        """
        :param str cert: Specifies a cert name for use.
        :param str chain: Contains a certificate chain that is relevant to the certificate and key mentioned earlier.This key is optional
        :param str key: Contains a key name
        :param str name: Specifies the name of the profile.Name of Profile should be full path.The full path is the combination of the `partition + profile name`,For example `/Common/test-clientssl-profile`.
        """
        if cert is not None:
            pulumi.set(__self__, "cert", cert)
        if chain is not None:
            pulumi.set(__self__, "chain", chain)
        if key is not None:
            pulumi.set(__self__, "key", key)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if passphrase is not None:
            pulumi.set(__self__, "passphrase", passphrase)

    @property
    @pulumi.getter
    def cert(self) -> Optional[str]:
        """
        Specifies a cert name for use.
        """
        return pulumi.get(self, "cert")

    @property
    @pulumi.getter
    def chain(self) -> Optional[str]:
        """
        Contains a certificate chain that is relevant to the certificate and key mentioned earlier.This key is optional
        """
        return pulumi.get(self, "chain")

    @property
    @pulumi.getter
    def key(self) -> Optional[str]:
        """
        Contains a key name
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def name(self) -> Optional[str]:
        """
        Specifies the name of the profile.Name of Profile should be full path.The full path is the combination of the `partition + profile name`,For example `/Common/test-clientssl-profile`.
        """
        return pulumi.get(self, "name")

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


@pulumi.output_type
class SnatOrigin(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "appService":
            suggest = "app_service"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in SnatOrigin. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        SnatOrigin.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        SnatOrigin.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 app_service: Optional[str] = None,
                 name: Optional[str] = None):
        """
        :param str name: Name of the snat
        """
        if app_service is not None:
            pulumi.set(__self__, "app_service", app_service)
        if name is not None:
            pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="appService")
    def app_service(self) -> Optional[str]:
        return pulumi.get(self, "app_service")

    @property
    @pulumi.getter
    def name(self) -> Optional[str]:
        """
        Name of the snat
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetDataGroupRecordResult(dict):
    def __init__(__self__, *,
                 name: str,
                 data: Optional[str] = None):
        """
        :param str name: Name of the datagroup
        """
        pulumi.set(__self__, "name", name)
        if data is not None:
            pulumi.set(__self__, "data", data)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        Name of the datagroup
        """
        return pulumi.get(self, "name")

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


@pulumi.output_type
class GetNodeFqdnResult(dict):
    def __init__(__self__, *,
                 autopopulate: str,
                 downinterval: int,
                 interval: str,
                 address_family: Optional[str] = None,
                 name: Optional[str] = None):
        """
        :param str autopopulate: Specifies if the node should scale to the IP address set returned by DNS.
        :param int downinterval: The number of attempts to resolve a domain name.
        :param str interval: The amount of time before sending the next DNS query.
        :param str address_family: The FQDN node's address family.
        :param str name: Name of the node.
        """
        pulumi.set(__self__, "autopopulate", autopopulate)
        pulumi.set(__self__, "downinterval", downinterval)
        pulumi.set(__self__, "interval", interval)
        if address_family is not None:
            pulumi.set(__self__, "address_family", address_family)
        if name is not None:
            pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def autopopulate(self) -> str:
        """
        Specifies if the node should scale to the IP address set returned by DNS.
        """
        return pulumi.get(self, "autopopulate")

    @property
    @pulumi.getter
    def downinterval(self) -> int:
        """
        The number of attempts to resolve a domain name.
        """
        return pulumi.get(self, "downinterval")

    @property
    @pulumi.getter
    def interval(self) -> str:
        """
        The amount of time before sending the next DNS query.
        """
        return pulumi.get(self, "interval")

    @property
    @pulumi.getter(name="addressFamily")
    def address_family(self) -> Optional[str]:
        """
        The FQDN node's address family.
        """
        return pulumi.get(self, "address_family")

    @property
    @pulumi.getter
    def name(self) -> Optional[str]:
        """
        Name of the node.
        """
        return pulumi.get(self, "name")



# 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 warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from .. import _utilities
from . import outputs

__all__ = [
    'DataGroupRecord',
    'NodeFqdn',
    'PolicyRule',
    'PolicyRuleAction',
    'PolicyRuleCondition',
    'ProfileClientSslCertKeyChain',
    'SnatOrigin',
    'GetDataGroupRecordResult',
    'GetNodeFqdnResult',
]

@pulumi.output_type
class DataGroupRecord(dict):
    def __init__(__self__, *,
                 name: str,
                 data: Optional[str] = None):
        """
        :param str name: , sets the value of the record's `name` attribute, must be of type defined in `type` attribute
        :param str data: , sets the value of the record's `data` attribute, specifying a value here will create a record in the form of `name := data`
        """
        pulumi.set(__self__, "name", name)
        if data is not None:
            pulumi.set(__self__, "data", data)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        , sets the value of the record's `name` attribute, must be of type defined in `type` attribute
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def data(self) -> Optional[str]:
        """
        , sets the value of the record's `data` attribute, specifying a value here will create a record in the form of `name := data`
        """
        return pulumi.get(self, "data")


@pulumi.output_type
class NodeFqdn(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "addressFamily":
            suggest = "address_family"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NodeFqdn. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NodeFqdn.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NodeFqdn.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 address_family: Optional[str] = None,
                 autopopulate: Optional[str] = None,
                 downinterval: Optional[int] = None,
                 interval: Optional[str] = None,
                 name: Optional[str] = None):
        """
        :param str address_family: Specifies the node's address family. The default is 'unspecified', or IP-agnostic. This needs to be specified inside the fqdn (fully qualified domain name).
        :param str interval: Specifies the amount of time before sending the next DNS query. Default is 3600. This needs to be specified inside the fqdn (fully qualified domain name).
        :param str name: Name of the node
        """
        if address_family is not None:
            pulumi.set(__self__, "address_family", address_family)
        if autopopulate is not None:
            pulumi.set(__self__, "autopopulate", autopopulate)
        if downinterval is not None:
            pulumi.set(__self__, "downinterval", downinterval)
        if interval is not None:
            pulumi.set(__self__, "interval", interval)
        if name is not None:
            pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="addressFamily")
    def address_family(self) -> Optional[str]:
        """
        Specifies the node's address family. The default is 'unspecified', or IP-agnostic. This needs to be specified inside the fqdn (fully qualified domain name).
        """
        return pulumi.get(self, "address_family")

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

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

    @property
    @pulumi.getter
    def interval(self) -> Optional[str]:
        """
        Specifies the amount of time before sending the next DNS query. Default is 3600. This needs to be specified inside the fqdn (fully qualified domain name).
        """
        return pulumi.get(self, "interval")

    @property
    @pulumi.getter
    def name(self) -> Optional[str]:
        """
        Name of the node
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class PolicyRule(dict):
    def __init__(__self__, *,
                 name: str,
                 actions: Optional[Sequence['outputs.PolicyRuleAction']] = None,
                 conditions: Optional[Sequence['outputs.PolicyRuleCondition']] = None):
        """
        :param str name: Name of the Policy ( policy name should be in full path which is combination of partition and policy name )
        """
        pulumi.set(__self__, "name", name)
        if actions is not None:
            pulumi.set(__self__, "actions", actions)
        if conditions is not None:
            pulumi.set(__self__, "conditions", conditions)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        Name of the Policy ( policy name should be in full path which is combination of partition and policy name )
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def actions(self) -> Optional[Sequence['outputs.PolicyRuleAction']]:
        return pulumi.get(self, "actions")

    @property
    @pulumi.getter
    def conditions(self) -> Optional[Sequence['outputs.PolicyRuleCondition']]:
        return pulumi.get(self, "conditions")


@pulumi.output_type
class PolicyRuleAction(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "appService":
            suggest = "app_service"
        elif key == "clonePool":
            suggest = "clone_pool"
        elif key == "cookieHash":
            suggest = "cookie_hash"
        elif key == "cookieInsert":
            suggest = "cookie_insert"
        elif key == "cookiePassive":
            suggest = "cookie_passive"
        elif key == "cookieRewrite":
            suggest = "cookie_rewrite"
        elif key == "destinationAddress":
            suggest = "destination_address"
        elif key == "expirySecs":
            suggest = "expiry_secs"
        elif key == "fromProfile":
            suggest = "from_profile"
        elif key == "httpBasicAuth":
            suggest = "http_basic_auth"
        elif key == "httpCookie":
            suggest = "http_cookie"
        elif key == "httpHeader":
            suggest = "http_header"
        elif key == "httpHost":
            suggest = "http_host"
        elif key == "httpReferer":
            suggest = "http_referer"
        elif key == "httpReply":
            suggest = "http_reply"
        elif key == "httpSetCookie":
            suggest = "http_set_cookie"
        elif key == "httpUri":
            suggest = "http_uri"
        elif key == "internalVirtual":
            suggest = "internal_virtual"
        elif key == "ipAddress":
            suggest = "ip_address"
        elif key == "ltmPolicy":
            suggest = "ltm_policy"
        elif key == "queryString":
            suggest = "query_string"
        elif key == "requestAdapt":
            suggest = "request_adapt"
        elif key == "responseAdapt":
            suggest = "response_adapt"
        elif key == "serverSsl":
            suggest = "server_ssl"
        elif key == "setVariable":
            suggest = "set_variable"
        elif key == "sourceAddress":
            suggest = "source_address"
        elif key == "sslClientHello":
            suggest = "ssl_client_hello"
        elif key == "sslServerHandshake":
            suggest = "ssl_server_handshake"
        elif key == "sslServerHello":
            suggest = "ssl_server_hello"
        elif key == "sslSessionId":
            suggest = "ssl_session_id"
        elif key == "tcpNagle":
            suggest = "tcp_nagle"
        elif key == "tmName":
            suggest = "tm_name"
        elif key == "vlanId":
            suggest = "vlan_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in PolicyRuleAction. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        PolicyRuleAction.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        PolicyRuleAction.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 app_service: Optional[str] = None,
                 application: Optional[str] = None,
                 asm: Optional[bool] = None,
                 avr: Optional[bool] = None,
                 cache: Optional[bool] = None,
                 carp: Optional[bool] = None,
                 category: Optional[str] = None,
                 classify: Optional[bool] = None,
                 clone_pool: Optional[str] = None,
                 code: Optional[int] = None,
                 compress: Optional[bool] = None,
                 connection: Optional[bool] = None,
                 content: Optional[str] = None,
                 cookie_hash: Optional[bool] = None,
                 cookie_insert: Optional[bool] = None,
                 cookie_passive: Optional[bool] = None,
                 cookie_rewrite: Optional[bool] = None,
                 decompress: Optional[bool] = None,
                 defer: Optional[bool] = None,
                 destination_address: Optional[bool] = None,
                 disable: Optional[bool] = None,
                 domain: Optional[str] = None,
                 enable: Optional[bool] = None,
                 expiry: Optional[str] = None,
                 expiry_secs: Optional[int] = None,
                 expression: Optional[str] = None,
                 extension: Optional[str] = None,
                 facility: Optional[str] = None,
                 forward: Optional[bool] = None,
                 from_profile: Optional[str] = None,
                 hash: Optional[bool] = None,
                 host: Optional[str] = None,
                 http: Optional[bool] = None,
                 http_basic_auth: Optional[bool] = None,
                 http_cookie: Optional[bool] = None,
                 http_header: Optional[bool] = None,
                 http_host: Optional[bool] = None,
                 http_referer: Optional[bool] = None,
                 http_reply: Optional[bool] = None,
                 http_set_cookie: Optional[bool] = None,
                 http_uri: Optional[bool] = None,
                 ifile: Optional[str] = None,
                 insert: Optional[bool] = None,
                 internal_virtual: Optional[str] = None,
                 ip_address: Optional[str] = None,
                 key: Optional[str] = None,
                 l7dos: Optional[bool] = None,
                 length: Optional[int] = None,
                 location: Optional[str] = None,
                 log: Optional[bool] = None,
                 ltm_policy: Optional[bool] = None,
                 member: Optional[str] = None,
                 message: Optional[str] = None,
                 netmask: Optional[str] = None,
                 nexthop: Optional[str] = None,
                 node: Optional[str] = None,
                 offset: Optional[int] = None,
                 path: Optional[str] = None,
                 pem: Optional[bool] = None,
                 persist: Optional[bool] = None,
                 pin: Optional[bool] = None,
                 policy: Optional[str] = None,
                 pool: Optional[str] = None,
                 port: Optional[int] = None,
                 priority: Optional[str] = None,
                 profile: Optional[str] = None,
                 protocol: Optional[str] = None,
                 query_string: Optional[str] = None,
                 rateclass: Optional[str] = None,
                 redirect: Optional[bool] = None,
                 remove: Optional[bool] = None,
                 replace: Optional[bool] = None,
                 request: Optional[bool] = None,
                 request_adapt: Optional[bool] = None,
                 reset: Optional[bool] = None,
                 response: Optional[bool] = None,
                 response_adapt: Optional[bool] = None,
                 scheme: Optional[str] = None,
                 script: Optional[str] = None,
                 select: Optional[bool] = None,
                 server_ssl: Optional[bool] = None,
                 set_variable: Optional[bool] = None,
                 shutdown: Optional[bool] = None,
                 snat: Optional[str] = None,
                 snatpool: Optional[str] = None,
                 source_address: Optional[bool] = None,
                 ssl_client_hello: Optional[bool] = None,
                 ssl_server_handshake: Optional[bool] = None,
                 ssl_server_hello: Optional[bool] = None,
                 ssl_session_id: Optional[bool] = None,
                 status: Optional[int] = None,
                 tcl: Optional[bool] = None,
                 tcp_nagle: Optional[bool] = None,
                 text: Optional[str] = None,
                 timeout: Optional[int] = None,
                 tm_name: Optional[str] = None,
                 uie: Optional[bool] = None,
                 universal: Optional[bool] = None,
                 value: Optional[str] = None,
                 virtual: Optional[str] = None,
                 vlan: Optional[str] = None,
                 vlan_id: Optional[int] = None,
                 wam: Optional[bool] = None,
                 write: Optional[bool] = None):
        """
        :param bool forward: This action will affect forwarding.
        :param str pool: This action will direct the stream to this pool.
        """
        if app_service is not None:
            pulumi.set(__self__, "app_service", app_service)
        if application is not None:
            pulumi.set(__self__, "application", application)
        if asm is not None:
            pulumi.set(__self__, "asm", asm)
        if avr is not None:
            pulumi.set(__self__, "avr", avr)
        if cache is not None:
            pulumi.set(__self__, "cache", cache)
        if carp is not None:
            pulumi.set(__self__, "carp", carp)
        if category is not None:
            pulumi.set(__self__, "category", category)
        if classify is not None:
            pulumi.set(__self__, "classify", classify)
        if clone_pool is not None:
            pulumi.set(__self__, "clone_pool", clone_pool)
        if code is not None:
            pulumi.set(__self__, "code", code)
        if compress is not None:
            pulumi.set(__self__, "compress", compress)
        if connection is not None:
            pulumi.set(__self__, "connection", connection)
        if content is not None:
            pulumi.set(__self__, "content", content)
        if cookie_hash is not None:
            pulumi.set(__self__, "cookie_hash", cookie_hash)
        if cookie_insert is not None:
            pulumi.set(__self__, "cookie_insert", cookie_insert)
        if cookie_passive is not None:
            pulumi.set(__self__, "cookie_passive", cookie_passive)
        if cookie_rewrite is not None:
            pulumi.set(__self__, "cookie_rewrite", cookie_rewrite)
        if decompress is not None:
            pulumi.set(__self__, "decompress", decompress)
        if defer is not None:
            pulumi.set(__self__, "defer", defer)
        if destination_address is not None:
            pulumi.set(__self__, "destination_address", destination_address)
        if disable is not None:
            pulumi.set(__self__, "disable", disable)
        if domain is not None:
            pulumi.set(__self__, "domain", domain)
        if enable is not None:
            pulumi.set(__self__, "enable", enable)
        if expiry is not None:
            pulumi.set(__self__, "expiry", expiry)
        if expiry_secs is not None:
            pulumi.set(__self__, "expiry_secs", expiry_secs)
        if expression is not None:
            pulumi.set(__self__, "expression", expression)
        if extension is not None:
            pulumi.set(__self__, "extension", extension)
        if facility is not None:
            pulumi.set(__self__, "facility", facility)
        if forward is not None:
            pulumi.set(__self__, "forward", forward)
        if from_profile is not None:
            pulumi.set(__self__, "from_profile", from_profile)
        if hash is not None:
            pulumi.set(__self__, "hash", hash)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if http is not None:
            pulumi.set(__self__, "http", http)
        if http_basic_auth is not None:
            pulumi.set(__self__, "http_basic_auth", http_basic_auth)
        if http_cookie is not None:
            pulumi.set(__self__, "http_cookie", http_cookie)
        if http_header is not None:
            pulumi.set(__self__, "http_header", http_header)
        if http_host is not None:
            pulumi.set(__self__, "http_host", http_host)
        if http_referer is not None:
            pulumi.set(__self__, "http_referer", http_referer)
        if http_reply is not None:
            pulumi.set(__self__, "http_reply", http_reply)
        if http_set_cookie is not None:
            pulumi.set(__self__, "http_set_cookie", http_set_cookie)
        if http_uri is not None:
            pulumi.set(__self__, "http_uri", http_uri)
        if ifile is not None:
            pulumi.set(__self__, "ifile", ifile)
        if insert is not None:
            pulumi.set(__self__, "insert", insert)
        if internal_virtual is not None:
            pulumi.set(__self__, "internal_virtual", internal_virtual)
        if ip_address is not None:
            pulumi.set(__self__, "ip_address", ip_address)
        if key is not None:
            pulumi.set(__self__, "key", key)
        if l7dos is not None:
            pulumi.set(__self__, "l7dos", l7dos)
        if length is not None:
            pulumi.set(__self__, "length", length)
        if location is not None:
            pulumi.set(__self__, "location", location)
        if log is not None:
            pulumi.set(__self__, "log", log)
        if ltm_policy is not None:
            pulumi.set(__self__, "ltm_policy", ltm_policy)
        if member is not None:
            pulumi.set(__self__, "member", member)
        if message is not None:
            pulumi.set(__self__, "message", message)
        if netmask is not None:
            pulumi.set(__self__, "netmask", netmask)
        if nexthop is not None:
            pulumi.set(__self__, "nexthop", nexthop)
        if node is not None:
            pulumi.set(__self__, "node", node)
        if offset is not None:
            pulumi.set(__self__, "offset", offset)
        if path is not None:
            pulumi.set(__self__, "path", path)
        if pem is not None:
            pulumi.set(__self__, "pem", pem)
        if persist is not None:
            pulumi.set(__self__, "persist", persist)
        if pin is not None:
            pulumi.set(__self__, "pin", pin)
        if policy is not None:
            pulumi.set(__self__, "policy", policy)
        if pool is not None:
            pulumi.set(__self__, "pool", pool)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if priority is not None:
            pulumi.set(__self__, "priority", priority)
        if profile is not None:
            pulumi.set(__self__, "profile", profile)
        if protocol is not None:
            pulumi.set(__self__, "protocol", protocol)
        if query_string is not None:
            pulumi.set(__self__, "query_string", query_string)
        if rateclass is not None:
            pulumi.set(__self__, "rateclass", rateclass)
        if redirect is not None:
            pulumi.set(__self__, "redirect", redirect)
        if remove is not None:
            pulumi.set(__self__, "remove", remove)
        if replace is not None:
            pulumi.set(__self__, "replace", replace)
        if request is not None:
            pulumi.set(__self__, "request", request)
        if request_adapt is not None:
            pulumi.set(__self__, "request_adapt", request_adapt)
        if reset is not None:
            pulumi.set(__self__, "reset", reset)
        if response is not None:
            pulumi.set(__self__, "response", response)
        if response_adapt is not None:
            pulumi.set(__self__, "response_adapt", response_adapt)
        if scheme is not None:
            pulumi.set(__self__, "scheme", scheme)
        if script is not None:
            pulumi.set(__self__, "script", script)
        if select is not None:
            pulumi.set(__self__, "select", select)
        if server_ssl is not None:
            pulumi.set(__self__, "server_ssl", server_ssl)
        if set_variable is not None:
            pulumi.set(__self__, "set_variable", set_variable)
        if shutdown is not None:
            pulumi.set(__self__, "shutdown", shutdown)
        if snat is not None:
            pulumi.set(__self__, "snat", snat)
        if snatpool is not None:
            pulumi.set(__self__, "snatpool", snatpool)
        if source_address is not None:
            pulumi.set(__self__, "source_address", source_address)
        if ssl_client_hello is not None:
            pulumi.set(__self__, "ssl_client_hello", ssl_client_hello)
        if ssl_server_handshake is not None:
            pulumi.set(__self__, "ssl_server_handshake", ssl_server_handshake)
        if ssl_server_hello is not None:
            pulumi.set(__self__, "ssl_server_hello", ssl_server_hello)
        if ssl_session_id is not None:
            pulumi.set(__self__, "ssl_session_id", ssl_session_id)
        if status is not None:
            pulumi.set(__self__, "status", status)
        if tcl is not None:
            pulumi.set(__self__, "tcl", tcl)
        if tcp_nagle is not None:
            pulumi.set(__self__, "tcp_nagle", tcp_nagle)
        if text is not None:
            pulumi.set(__self__, "text", text)
        if timeout is not None:
            pulumi.set(__self__, "timeout", timeout)
        if tm_name is not None:
            pulumi.set(__self__, "tm_name", tm_name)
        if uie is not None:
            pulumi.set(__self__, "uie", uie)
        if universal is not None:
            pulumi.set(__self__, "universal", universal)
        if value is not None:
            pulumi.set(__self__, "value", value)
        if virtual is not None:
            pulumi.set(__self__, "virtual", virtual)
        if vlan is not None:
            pulumi.set(__self__, "vlan", vlan)
        if vlan_id is not None:
            pulumi.set(__self__, "vlan_id", vlan_id)
        if wam is not None:
            pulumi.set(__self__, "wam", wam)
        if write is not None:
            pulumi.set(__self__, "write", write)

    @property
    @pulumi.getter(name="appService")
    def app_service(self) -> Optional[str]:
        return pulumi.get(self, "app_service")

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

    @property
    @pulumi.getter
    def asm(self) -> Optional[bool]:
        return pulumi.get(self, "asm")

    @property
    @pulumi.getter
    def avr(self) -> Optional[bool]:
        return pulumi.get(self, "avr")

    @property
    @pulumi.getter
    def cache(self) -> Optional[bool]:
        return pulumi.get(self, "cache")

    @property
    @pulumi.getter
    def carp(self) -> Optional[bool]:
        return pulumi.get(self, "carp")

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

    @property
    @pulumi.getter
    def classify(self) -> Optional[bool]:
        return pulumi.get(self, "classify")

    @property
    @pulumi.getter(name="clonePool")
    def clone_pool(self) -> Optional[str]:
        return pulumi.get(self, "clone_pool")

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

    @property
    @pulumi.getter
    def compress(self) -> Optional[bool]:
        return pulumi.get(self, "compress")

    @property
    @pulumi.getter
    def connection(self) -> Optional[bool]:
        return pulumi.get(self, "connection")

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

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

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

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

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

    @property
    @pulumi.getter
    def decompress(self) -> Optional[bool]:
        return pulumi.get(self, "decompress")

    @property
    @pulumi.getter
    def defer(self) -> Optional[bool]:
        return pulumi.get(self, "defer")

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

    @property
    @pulumi.getter
    def disable(self) -> Optional[bool]:
        return pulumi.get(self, "disable")

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

    @property
    @pulumi.getter
    def enable(self) -> Optional[bool]:
        return pulumi.get(self, "enable")

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

    @property
    @pulumi.getter(name="expirySecs")
    def expiry_secs(self) -> Optional[int]:
        return pulumi.get(self, "expiry_secs")

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

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

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

    @property
    @pulumi.getter
    def forward(self) -> Optional[bool]:
        """
        This action will affect forwarding.
        """
        return pulumi.get(self, "forward")

    @property
    @pulumi.getter(name="fromProfile")
    def from_profile(self) -> Optional[str]:
        return pulumi.get(self, "from_profile")

    @property
    @pulumi.getter
    def hash(self) -> Optional[bool]:
        return pulumi.get(self, "hash")

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

    @property
    @pulumi.getter
    def http(self) -> Optional[bool]:
        return pulumi.get(self, "http")

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

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

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

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

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

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

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

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

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

    @property
    @pulumi.getter
    def insert(self) -> Optional[bool]:
        return pulumi.get(self, "insert")

    @property
    @pulumi.getter(name="internalVirtual")
    def internal_virtual(self) -> Optional[str]:
        return pulumi.get(self, "internal_virtual")

    @property
    @pulumi.getter(name="ipAddress")
    def ip_address(self) -> Optional[str]:
        return pulumi.get(self, "ip_address")

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

    @property
    @pulumi.getter
    def l7dos(self) -> Optional[bool]:
        return pulumi.get(self, "l7dos")

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

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

    @property
    @pulumi.getter
    def log(self) -> Optional[bool]:
        return pulumi.get(self, "log")

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

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

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

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

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

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

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

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

    @property
    @pulumi.getter
    def pem(self) -> Optional[bool]:
        return pulumi.get(self, "pem")

    @property
    @pulumi.getter
    def persist(self) -> Optional[bool]:
        return pulumi.get(self, "persist")

    @property
    @pulumi.getter
    def pin(self) -> Optional[bool]:
        return pulumi.get(self, "pin")

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

    @property
    @pulumi.getter
    def pool(self) -> Optional[str]:
        """
        This action will direct the stream to this pool.
        """
        return pulumi.get(self, "pool")

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

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

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

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

    @property
    @pulumi.getter(name="queryString")
    def query_string(self) -> Optional[str]:
        return pulumi.get(self, "query_string")

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

    @property
    @pulumi.getter
    def redirect(self) -> Optional[bool]:
        return pulumi.get(self, "redirect")

    @property
    @pulumi.getter
    def remove(self) -> Optional[bool]:
        return pulumi.get(self, "remove")

    @property
    @pulumi.getter
    def replace(self) -> Optional[bool]:
        return pulumi.get(self, "replace")

    @property
    @pulumi.getter
    def request(self) -> Optional[bool]:
        return pulumi.get(self, "request")

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

    @property
    @pulumi.getter
    def reset(self) -> Optional[bool]:
        return pulumi.get(self, "reset")

    @property
    @pulumi.getter
    def response(self) -> Optional[bool]:
        return pulumi.get(self, "response")

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

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

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

    @property
    @pulumi.getter
    def select(self) -> Optional[bool]:
        return pulumi.get(self, "select")

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

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

    @property
    @pulumi.getter
    def shutdown(self) -> Optional[bool]:
        return pulumi.get(self, "shutdown")

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

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

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

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

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

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

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

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

    @property
    @pulumi.getter
    def tcl(self) -> Optional[bool]:
        return pulumi.get(self, "tcl")

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

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

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

    @property
    @pulumi.getter(name="tmName")
    def tm_name(self) -> Optional[str]:
        return pulumi.get(self, "tm_name")

    @property
    @pulumi.getter
    def uie(self) -> Optional[bool]:
        return pulumi.get(self, "uie")

    @property
    @pulumi.getter
    def universal(self) -> Optional[bool]:
        return pulumi.get(self, "universal")

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

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

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

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> Optional[int]:
        return pulumi.get(self, "vlan_id")

    @property
    @pulumi.getter
    def wam(self) -> Optional[bool]:
        return pulumi.get(self, "wam")

    @property
    @pulumi.getter
    def write(self) -> Optional[bool]:
        return pulumi.get(self, "write")


@pulumi.output_type
class PolicyRuleCondition(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "appService":
            suggest = "app_service"
        elif key == "browserType":
            suggest = "browser_type"
        elif key == "browserVersion":
            suggest = "browser_version"
        elif key == "caseInsensitive":
            suggest = "case_insensitive"
        elif key == "caseSensitive":
            suggest = "case_sensitive"
        elif key == "cipherBits":
            suggest = "cipher_bits"
        elif key == "clientSsl":
            suggest = "client_ssl"
        elif key == "commonName":
            suggest = "common_name"
        elif key == "countryCode":
            suggest = "country_code"
        elif key == "countryName":
            suggest = "country_name"
        elif key == "cpuUsage":
            suggest = "cpu_usage"
        elif key == "deviceMake":
            suggest = "device_make"
        elif key == "deviceModel":
            suggest = "device_model"
        elif key == "endsWith":
            suggest = "ends_with"
        elif key == "greaterOrEqual":
            suggest = "greater_or_equal"
        elif key == "httpBasicAuth":
            suggest = "http_basic_auth"
        elif key == "httpCookie":
            suggest = "http_cookie"
        elif key == "httpHeader":
            suggest = "http_header"
        elif key == "httpHost":
            suggest = "http_host"
        elif key == "httpMethod":
            suggest = "http_method"
        elif key == "httpReferer":
            suggest = "http_referer"
        elif key == "httpSetCookie":
            suggest = "http_set_cookie"
        elif key == "httpStatus":
            suggest = "http_status"
        elif key == "httpUri":
            suggest = "http_uri"
        elif key == "httpUserAgent":
            suggest = "http_user_agent"
        elif key == "httpVersion":
            suggest = "http_version"
        elif key == "lessOrEqual":
            suggest = "less_or_equal"
        elif key == "not":
            suggest = "not_"
        elif key == "pathSegment":
            suggest = "path_segment"
        elif key == "queryParameter":
            suggest = "query_parameter"
        elif key == "queryString":
            suggest = "query_string"
        elif key == "regionCode":
            suggest = "region_code"
        elif key == "regionName":
            suggest = "region_name"
        elif key == "routeDomain":
            suggest = "route_domain"
        elif key == "serverName":
            suggest = "server_name"
        elif key == "sslCert":
            suggest = "ssl_cert"
        elif key == "sslClientHello":
            suggest = "ssl_client_hello"
        elif key == "sslExtension":
            suggest = "ssl_extension"
        elif key == "sslServerHandshake":
            suggest = "ssl_server_handshake"
        elif key == "sslServerHello":
            suggest = "ssl_server_hello"
        elif key == "startsWith":
            suggest = "starts_with"
        elif key == "tmName":
            suggest = "tm_name"
        elif key == "unnamedQueryParameter":
            suggest = "unnamed_query_parameter"
        elif key == "userAgentToken":
            suggest = "user_agent_token"
        elif key == "vlanId":
            suggest = "vlan_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in PolicyRuleCondition. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        PolicyRuleCondition.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        PolicyRuleCondition.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 address: Optional[bool] = None,
                 all: Optional[bool] = None,
                 app_service: Optional[str] = None,
                 browser_type: Optional[bool] = None,
                 browser_version: Optional[bool] = None,
                 case_insensitive: Optional[bool] = None,
                 case_sensitive: Optional[bool] = None,
                 cipher: Optional[bool] = None,
                 cipher_bits: Optional[bool] = None,
                 client_ssl: Optional[bool] = None,
                 code: Optional[bool] = None,
                 common_name: Optional[bool] = None,
                 contains: Optional[bool] = None,
                 continent: Optional[bool] = None,
                 country_code: Optional[bool] = None,
                 country_name: Optional[bool] = None,
                 cpu_usage: Optional[bool] = None,
                 device_make: Optional[bool] = None,
                 device_model: Optional[bool] = None,
                 domain: Optional[bool] = None,
                 ends_with: Optional[bool] = None,
                 equals: Optional[bool] = None,
                 expiry: Optional[bool] = None,
                 extension: Optional[bool] = None,
                 external: Optional[bool] = None,
                 geoip: Optional[bool] = None,
                 greater: Optional[bool] = None,
                 greater_or_equal: Optional[bool] = None,
                 host: Optional[bool] = None,
                 http_basic_auth: Optional[bool] = None,
                 http_cookie: Optional[bool] = None,
                 http_header: Optional[bool] = None,
                 http_host: Optional[bool] = None,
                 http_method: Optional[bool] = None,
                 http_referer: Optional[bool] = None,
                 http_set_cookie: Optional[bool] = None,
                 http_status: Optional[bool] = None,
                 http_uri: Optional[bool] = None,
                 http_user_agent: Optional[bool] = None,
                 http_version: Optional[bool] = None,
                 index: Optional[int] = None,
                 internal: Optional[bool] = None,
                 isp: Optional[bool] = None,
                 last15secs: Optional[bool] = None,
                 last1min: Optional[bool] = None,
                 last5mins: Optional[bool] = None,
                 less: Optional[bool] = None,
                 less_or_equal: Optional[bool] = None,
                 local: Optional[bool] = None,
                 major: Optional[bool] = None,
                 matches: Optional[bool] = None,
                 minor: Optional[bool] = None,
                 missing: Optional[bool] = None,
                 mss: Optional[bool] = None,
                 not_: Optional[bool] = None,
                 org: Optional[bool] = None,
                 password: Optional[bool] = None,
                 path: Optional[bool] = None,
                 path_segment: Optional[bool] = None,
                 port: Optional[bool] = None,
                 present: Optional[bool] = None,
                 protocol: Optional[bool] = None,
                 query_parameter: Optional[bool] = None,
                 query_string: Optional[bool] = None,
                 region_code: Optional[bool] = None,
                 region_name: Optional[bool] = None,
                 remote: Optional[bool] = None,
                 request: Optional[bool] = None,
                 response: Optional[bool] = None,
                 route_domain: Optional[bool] = None,
                 rtt: Optional[bool] = None,
                 scheme: Optional[bool] = None,
                 server_name: Optional[bool] = None,
                 ssl_cert: Optional[bool] = None,
                 ssl_client_hello: Optional[bool] = None,
                 ssl_extension: Optional[bool] = None,
                 ssl_server_handshake: Optional[bool] = None,
                 ssl_server_hello: Optional[bool] = None,
                 starts_with: Optional[bool] = None,
                 tcp: Optional[bool] = None,
                 text: Optional[bool] = None,
                 tm_name: Optional[str] = None,
                 unnamed_query_parameter: Optional[bool] = None,
                 user_agent_token: Optional[bool] = None,
                 username: Optional[bool] = None,
                 value: Optional[bool] = None,
                 values: Optional[Sequence[str]] = None,
                 version: Optional[bool] = None,
                 vlan: Optional[bool] = None,
                 vlan_id: Optional[bool] = None):
        if address is not None:
            pulumi.set(__self__, "address", address)
        if all is not None:
            pulumi.set(__self__, "all", all)
        if app_service is not None:
            pulumi.set(__self__, "app_service", app_service)
        if browser_type is not None:
            pulumi.set(__self__, "browser_type", browser_type)
        if browser_version is not None:
            pulumi.set(__self__, "browser_version", browser_version)
        if case_insensitive is not None:
            pulumi.set(__self__, "case_insensitive", case_insensitive)
        if case_sensitive is not None:
            pulumi.set(__self__, "case_sensitive", case_sensitive)
        if cipher is not None:
            pulumi.set(__self__, "cipher", cipher)
        if cipher_bits is not None:
            pulumi.set(__self__, "cipher_bits", cipher_bits)
        if client_ssl is not None:
            pulumi.set(__self__, "client_ssl", client_ssl)
        if code is not None:
            pulumi.set(__self__, "code", code)
        if common_name is not None:
            pulumi.set(__self__, "common_name", common_name)
        if contains is not None:
            pulumi.set(__self__, "contains", contains)
        if continent is not None:
            pulumi.set(__self__, "continent", continent)
        if country_code is not None:
            pulumi.set(__self__, "country_code", country_code)
        if country_name is not None:
            pulumi.set(__self__, "country_name", country_name)
        if cpu_usage is not None:
            pulumi.set(__self__, "cpu_usage", cpu_usage)
        if device_make is not None:
            pulumi.set(__self__, "device_make", device_make)
        if device_model is not None:
            pulumi.set(__self__, "device_model", device_model)
        if domain is not None:
            pulumi.set(__self__, "domain", domain)
        if ends_with is not None:
            pulumi.set(__self__, "ends_with", ends_with)
        if equals is not None:
            pulumi.set(__self__, "equals", equals)
        if expiry is not None:
            pulumi.set(__self__, "expiry", expiry)
        if extension is not None:
            pulumi.set(__self__, "extension", extension)
        if external is not None:
            pulumi.set(__self__, "external", external)
        if geoip is not None:
            pulumi.set(__self__, "geoip", geoip)
        if greater is not None:
            pulumi.set(__self__, "greater", greater)
        if greater_or_equal is not None:
            pulumi.set(__self__, "greater_or_equal", greater_or_equal)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if http_basic_auth is not None:
            pulumi.set(__self__, "http_basic_auth", http_basic_auth)
        if http_cookie is not None:
            pulumi.set(__self__, "http_cookie", http_cookie)
        if http_header is not None:
            pulumi.set(__self__, "http_header", http_header)
        if http_host is not None:
            pulumi.set(__self__, "http_host", http_host)
        if http_method is not None:
            pulumi.set(__self__, "http_method", http_method)
        if http_referer is not None:
            pulumi.set(__self__, "http_referer", http_referer)
        if http_set_cookie is not None:
            pulumi.set(__self__, "http_set_cookie", http_set_cookie)
        if http_status is not None:
            pulumi.set(__self__, "http_status", http_status)
        if http_uri is not None:
            pulumi.set(__self__, "http_uri", http_uri)
        if http_user_agent is not None:
            pulumi.set(__self__, "http_user_agent", http_user_agent)
        if http_version is not None:
            pulumi.set(__self__, "http_version", http_version)
        if index is not None:
            pulumi.set(__self__, "index", index)
        if internal is not None:
            pulumi.set(__self__, "internal", internal)
        if isp is not None:
            pulumi.set(__self__, "isp", isp)
        if last15secs is not None:
            pulumi.set(__self__, "last15secs", last15secs)
        if last1min is not None:
            pulumi.set(__self__, "last1min", last1min)
        if last5mins is not None:
            pulumi.set(__self__, "last5mins", last5mins)
        if less is not None:
            pulumi.set(__self__, "less", less)
        if less_or_equal is not None:
            pulumi.set(__self__, "less_or_equal", less_or_equal)
        if local is not None:
            pulumi.set(__self__, "local", local)
        if major is not None:
            pulumi.set(__self__, "major", major)
        if matches is not None:
            pulumi.set(__self__, "matches", matches)
        if minor is not None:
            pulumi.set(__self__, "minor", minor)
        if missing is not None:
            pulumi.set(__self__, "missing", missing)
        if mss is not None:
            pulumi.set(__self__, "mss", mss)
        if not_ is not None:
            pulumi.set(__self__, "not_", not_)
        if org is not None:
            pulumi.set(__self__, "org", org)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if path is not None:
            pulumi.set(__self__, "path", path)
        if path_segment is not None:
            pulumi.set(__self__, "path_segment", path_segment)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if present is not None:
            pulumi.set(__self__, "present", present)
        if protocol is not None:
            pulumi.set(__self__, "protocol", protocol)
        if query_parameter is not None:
            pulumi.set(__self__, "query_parameter", query_parameter)
        if query_string is not None:
            pulumi.set(__self__, "query_string", query_string)
        if region_code is not None:
            pulumi.set(__self__, "region_code", region_code)
        if region_name is not None:
            pulumi.set(__self__, "region_name", region_name)
        if remote is not None:
            pulumi.set(__self__, "remote", remote)
        if request is not None:
            pulumi.set(__self__, "request", request)
        if response is not None:
            pulumi.set(__self__, "response", response)
        if route_domain is not None:
            pulumi.set(__self__, "route_domain", route_domain)
        if rtt is not None:
            pulumi.set(__self__, "rtt", rtt)
        if scheme is not None:
            pulumi.set(__self__, "scheme", scheme)
        if server_name is not None:
            pulumi.set(__self__, "server_name", server_name)
        if ssl_cert is not None:
            pulumi.set(__self__, "ssl_cert", ssl_cert)
        if ssl_client_hello is not None:
            pulumi.set(__self__, "ssl_client_hello", ssl_client_hello)
        if ssl_extension is not None:
            pulumi.set(__self__, "ssl_extension", ssl_extension)
        if ssl_server_handshake is not None:
            pulumi.set(__self__, "ssl_server_handshake", ssl_server_handshake)
        if ssl_server_hello is not None:
            pulumi.set(__self__, "ssl_server_hello", ssl_server_hello)
        if starts_with is not None:
            pulumi.set(__self__, "starts_with", starts_with)
        if tcp is not None:
            pulumi.set(__self__, "tcp", tcp)
        if text is not None:
            pulumi.set(__self__, "text", text)
        if tm_name is not None:
            pulumi.set(__self__, "tm_name", tm_name)
        if unnamed_query_parameter is not None:
            pulumi.set(__self__, "unnamed_query_parameter", unnamed_query_parameter)
        if user_agent_token is not None:
            pulumi.set(__self__, "user_agent_token", user_agent_token)
        if username is not None:
            pulumi.set(__self__, "username", username)
        if value is not None:
            pulumi.set(__self__, "value", value)
        if values is not None:
            pulumi.set(__self__, "values", values)
        if version is not None:
            pulumi.set(__self__, "version", version)
        if vlan is not None:
            pulumi.set(__self__, "vlan", vlan)
        if vlan_id is not None:
            pulumi.set(__self__, "vlan_id", vlan_id)

    @property
    @pulumi.getter
    def address(self) -> Optional[bool]:
        return pulumi.get(self, "address")

    @property
    @pulumi.getter
    def all(self) -> Optional[bool]:
        return pulumi.get(self, "all")

    @property
    @pulumi.getter(name="appService")
    def app_service(self) -> Optional[str]:
        return pulumi.get(self, "app_service")

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

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

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

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

    @property
    @pulumi.getter
    def cipher(self) -> Optional[bool]:
        return pulumi.get(self, "cipher")

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

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

    @property
    @pulumi.getter
    def code(self) -> Optional[bool]:
        return pulumi.get(self, "code")

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

    @property
    @pulumi.getter
    def contains(self) -> Optional[bool]:
        return pulumi.get(self, "contains")

    @property
    @pulumi.getter
    def continent(self) -> Optional[bool]:
        return pulumi.get(self, "continent")

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

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

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

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

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

    @property
    @pulumi.getter
    def domain(self) -> Optional[bool]:
        return pulumi.get(self, "domain")

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

    @property
    @pulumi.getter
    def equals(self) -> Optional[bool]:
        return pulumi.get(self, "equals")

    @property
    @pulumi.getter
    def expiry(self) -> Optional[bool]:
        return pulumi.get(self, "expiry")

    @property
    @pulumi.getter
    def extension(self) -> Optional[bool]:
        return pulumi.get(self, "extension")

    @property
    @pulumi.getter
    def external(self) -> Optional[bool]:
        return pulumi.get(self, "external")

    @property
    @pulumi.getter
    def geoip(self) -> Optional[bool]:
        return pulumi.get(self, "geoip")

    @property
    @pulumi.getter
    def greater(self) -> Optional[bool]:
        return pulumi.get(self, "greater")

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

    @property
    @pulumi.getter
    def host(self) -> Optional[bool]:
        return pulumi.get(self, "host")

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

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

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

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

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

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

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

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

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

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

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

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

    @property
    @pulumi.getter
    def internal(self) -> Optional[bool]:
        return pulumi.get(self, "internal")

    @property
    @pulumi.getter
    def isp(self) -> Optional[bool]:
        return pulumi.get(self, "isp")

    @property
    @pulumi.getter
    def last15secs(self) -> Optional[bool]:
        return pulumi.get(self, "last15secs")

    @property
    @pulumi.getter
    def last1min(self) -> Optional[bool]:
        return pulumi.get(self, "last1min")

    @property
    @pulumi.getter
    def last5mins(self) -> Optional[bool]:
        return pulumi.get(self, "last5mins")

    @property
    @pulumi.getter
    def less(self) -> Optional[bool]:
        return pulumi.get(self, "less")

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

    @property
    @pulumi.getter
    def local(self) -> Optional[bool]:
        return pulumi.get(self, "local")

    @property
    @pulumi.getter
    def major(self) -> Optional[bool]:
        return pulumi.get(self, "major")

    @property
    @pulumi.getter
    def matches(self) -> Optional[bool]:
        return pulumi.get(self, "matches")

    @property
    @pulumi.getter
    def minor(self) -> Optional[bool]:
        return pulumi.get(self, "minor")

    @property
    @pulumi.getter
    def missing(self) -> Optional[bool]:
        return pulumi.get(self, "missing")

    @property
    @pulumi.getter
    def mss(self) -> Optional[bool]:
        return pulumi.get(self, "mss")

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

    @property
    @pulumi.getter
    def org(self) -> Optional[bool]:
        return pulumi.get(self, "org")

    @property
    @pulumi.getter
    def password(self) -> Optional[bool]:
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def path(self) -> Optional[bool]:
        return pulumi.get(self, "path")

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

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

    @property
    @pulumi.getter
    def present(self) -> Optional[bool]:
        return pulumi.get(self, "present")

    @property
    @pulumi.getter
    def protocol(self) -> Optional[bool]:
        return pulumi.get(self, "protocol")

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

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

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

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

    @property
    @pulumi.getter
    def remote(self) -> Optional[bool]:
        return pulumi.get(self, "remote")

    @property
    @pulumi.getter
    def request(self) -> Optional[bool]:
        return pulumi.get(self, "request")

    @property
    @pulumi.getter
    def response(self) -> Optional[bool]:
        return pulumi.get(self, "response")

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

    @property
    @pulumi.getter
    def rtt(self) -> Optional[bool]:
        return pulumi.get(self, "rtt")

    @property
    @pulumi.getter
    def scheme(self) -> Optional[bool]:
        return pulumi.get(self, "scheme")

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

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

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

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

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

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

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

    @property
    @pulumi.getter
    def tcp(self) -> Optional[bool]:
        return pulumi.get(self, "tcp")

    @property
    @pulumi.getter
    def text(self) -> Optional[bool]:
        return pulumi.get(self, "text")

    @property
    @pulumi.getter(name="tmName")
    def tm_name(self) -> Optional[str]:
        return pulumi.get(self, "tm_name")

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

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

    @property
    @pulumi.getter
    def username(self) -> Optional[bool]:
        return pulumi.get(self, "username")

    @property
    @pulumi.getter
    def value(self) -> Optional[bool]:
        return pulumi.get(self, "value")

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

    @property
    @pulumi.getter
    def version(self) -> Optional[bool]:
        return pulumi.get(self, "version")

    @property
    @pulumi.getter
    def vlan(self) -> Optional[bool]:
        return pulumi.get(self, "vlan")

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


@pulumi.output_type
class ProfileClientSslCertKeyChain(dict):
    def __init__(__self__, *,
                 cert: Optional[str] = None,
                 chain: Optional[str] = None,
                 key: Optional[str] = None,
                 name: Optional[str] = None,
                 passphrase: Optional[str] = None):
        """
        :param str cert: Specifies a cert name for use.
        :param str chain: Contains a certificate chain that is relevant to the certificate and key mentioned earlier.This key is optional
        :param str key: Contains a key name
        :param str name: Specifies the name of the profile.Name of Profile should be full path.The full path is the combination of the `partition + profile name`,For example `/Common/test-clientssl-profile`.
        """
        if cert is not None:
            pulumi.set(__self__, "cert", cert)
        if chain is not None:
            pulumi.set(__self__, "chain", chain)
        if key is not None:
            pulumi.set(__self__, "key", key)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if passphrase is not None:
            pulumi.set(__self__, "passphrase", passphrase)

    @property
    @pulumi.getter
    def cert(self) -> Optional[str]:
        """
        Specifies a cert name for use.
        """
        return pulumi.get(self, "cert")

    @property
    @pulumi.getter
    def chain(self) -> Optional[str]:
        """
        Contains a certificate chain that is relevant to the certificate and key mentioned earlier.This key is optional
        """
        return pulumi.get(self, "chain")

    @property
    @pulumi.getter
    def key(self) -> Optional[str]:
        """
        Contains a key name
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def name(self) -> Optional[str]:
        """
        Specifies the name of the profile.Name of Profile should be full path.The full path is the combination of the `partition + profile name`,For example `/Common/test-clientssl-profile`.
        """
        return pulumi.get(self, "name")

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


@pulumi.output_type
class SnatOrigin(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "appService":
            suggest = "app_service"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in SnatOrigin. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        SnatOrigin.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        SnatOrigin.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 app_service: Optional[str] = None,
                 name: Optional[str] = None):
        """
        :param str name: Name of the snat
        """
        if app_service is not None:
            pulumi.set(__self__, "app_service", app_service)
        if name is not None:
            pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="appService")
    def app_service(self) -> Optional[str]:
        return pulumi.get(self, "app_service")

    @property
    @pulumi.getter
    def name(self) -> Optional[str]:
        """
        Name of the snat
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetDataGroupRecordResult(dict):
    def __init__(__self__, *,
                 name: str,
                 data: Optional[str] = None):
        """
        :param str name: Name of the datagroup
        """
        pulumi.set(__self__, "name", name)
        if data is not None:
            pulumi.set(__self__, "data", data)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        Name of the datagroup
        """
        return pulumi.get(self, "name")

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


@pulumi.output_type
class GetNodeFqdnResult(dict):
    def __init__(__self__, *,
                 autopopulate: str,
                 downinterval: int,
                 interval: str,
                 address_family: Optional[str] = None,
                 name: Optional[str] = None):
        """
        :param str autopopulate: Specifies if the node should scale to the IP address set returned by DNS.
        :param int downinterval: The number of attempts to resolve a domain name.
        :param str interval: The amount of time before sending the next DNS query.
        :param str address_family: The FQDN node's address family.
        :param str name: Name of the node.
        """
        pulumi.set(__self__, "autopopulate", autopopulate)
        pulumi.set(__self__, "downinterval", downinterval)
        pulumi.set(__self__, "interval", interval)
        if address_family is not None:
            pulumi.set(__self__, "address_family", address_family)
        if name is not None:
            pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def autopopulate(self) -> str:
        """
        Specifies if the node should scale to the IP address set returned by DNS.
        """
        return pulumi.get(self, "autopopulate")

    @property
    @pulumi.getter
    def downinterval(self) -> int:
        """
        The number of attempts to resolve a domain name.
        """
        return pulumi.get(self, "downinterval")

    @property
    @pulumi.getter
    def interval(self) -> str:
        """
        The amount of time before sending the next DNS query.
        """
        return pulumi.get(self, "interval")

    @property
    @pulumi.getter(name="addressFamily")
    def address_family(self) -> Optional[str]:
        """
        The FQDN node's address family.
        """
        return pulumi.get(self, "address_family")

    @property
    @pulumi.getter
    def name(self) -> Optional[str]:
        """
        Name of the node.
        """
        return pulumi.get(self, "name")



# 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! *** :param str name: , sets the value of the record's `name` attribute, must be of type defined in `type` attribute         :param str data: , sets the value of the record's `data` attribute, specifying a value here will create a record in the form of `name := data` , sets the value of the record's `name` attribute, must be of type defined in `type` attribute , sets the value of the record's `data` attribute, specifying a value here will create a record in the form of `name := data` :param str address_family: Specifies the node's address family. The default is 'unspecified', or IP-agnostic. This needs to be specified inside the fqdn (fully qualified domain name).         :param str interval: Specifies the amount of time before sending the next DNS query. Default is 3600. This needs to be specified inside the fqdn (fully qualified domain name).         :param str name: Name of the node Specifies the node's address family. The default is 'unspecified', or IP-agnostic. This needs to be specified inside the fqdn (fully qualified domain name). Specifies the amount of time before sending the next DNS query. Default is 3600. This needs to be specified inside the fqdn (fully qualified domain name). Name of the node :param str name: Name of the Policy ( policy name should be in full path which is combination of partition and policy name ) Name of the Policy ( policy name should be in full path which is combination of partition and policy name ) :param bool forward: This action will affect forwarding.         :param str pool: This action will direct the stream to this pool. This action will affect forwarding. This action will direct the stream to this pool. :param str cert: Specifies a cert name for use.         :param str chain: Contains a certificate chain that is relevant to the certificate and key mentioned earlier.This key is optional         :param str key: Contains a key name         :param str name: Specifies the name of the profile.Name of Profile should be full path.The full path is the combination of the `partition + profile name`,For example `/Common/test-clientssl-profile`. Specifies a cert name for use. Contains a certificate chain that is relevant to the certificate and key mentioned earlier.This key is optional Contains a key name Specifies the name of the profile.Name of Profile should be full path.The full path is the combination of the `partition + profile name`,For example `/Common/test-clientssl-profile`. :param str name: Name of the snat Name of the snat :param str name: Name of the datagroup Name of the datagroup :param str autopopulate: Specifies if the node should scale to the IP address set returned by DNS.         :param int downinterval: The number of attempts to resolve a domain name.         :param str interval: The amount of time before sending the next DNS query.         :param str address_family: The FQDN node's address family.         :param str name: Name of the node. Specifies if the node should scale to the IP address set returned by DNS. The number of attempts to resolve a domain name. The amount of time before sending the next DNS query. The FQDN node's address family. Name of the node.