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

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

__all__ = ['GtmPoolArgs', 'GtmPool']

@pulumi.input_type
class GtmPoolArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[_builtins.str],
                 type: pulumi.Input[_builtins.str],
                 alternate_mode: Optional[pulumi.Input[_builtins.str]] = None,
                 disabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dynamic_ratio: Optional[pulumi.Input[_builtins.str]] = None,
                 enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 fallback_ip: Optional[pulumi.Input[_builtins.str]] = None,
                 fallback_mode: Optional[pulumi.Input[_builtins.str]] = None,
                 limit_max_bps: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_max_bps_status: Optional[pulumi.Input[_builtins.str]] = None,
                 limit_max_connections: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_max_connections_status: Optional[pulumi.Input[_builtins.str]] = None,
                 limit_max_pps: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_max_pps_status: Optional[pulumi.Input[_builtins.str]] = None,
                 load_balancing_mode: Optional[pulumi.Input[_builtins.str]] = None,
                 manual_resume: Optional[pulumi.Input[_builtins.str]] = None,
                 max_answers_returned: Optional[pulumi.Input[_builtins.int]] = None,
                 members: Optional[pulumi.Input[Sequence[pulumi.Input['GtmPoolMemberArgs']]]] = None,
                 min_members_up_mode: Optional[pulumi.Input[_builtins.str]] = None,
                 min_members_up_value: Optional[pulumi.Input[_builtins.int]] = None,
                 monitor: Optional[pulumi.Input[_builtins.str]] = None,
                 partition: Optional[pulumi.Input[_builtins.str]] = None,
                 qos_hit_ratio: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_hops: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_kilobytes_second: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_lcs: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_packet_rate: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_rtt: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_topology: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_vs_capacity: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_vs_score: Optional[pulumi.Input[_builtins.int]] = None,
                 ttl: Optional[pulumi.Input[_builtins.int]] = None,
                 verify_member_availability: Optional[pulumi.Input[_builtins.str]] = None):
        """
        The set of arguments for constructing a GtmPool resource.

        :param pulumi.Input[_builtins.str] name: Name of the GTM pool
        :param pulumi.Input[_builtins.str] type: Type of GTM pool (a, aaaa, cname, mx, naptr, srv)
        :param pulumi.Input[_builtins.str] alternate_mode: Specifies the load balancing mode to use if the preferred and alternate modes are unsuccessful
        :param pulumi.Input[_builtins.bool] disabled: Disabled state of the pool
        :param pulumi.Input[_builtins.str] dynamic_ratio: Enables or disables the dynamic ratio load balancing algorithm
        :param pulumi.Input[_builtins.bool] enabled: Enable or disable the pool
        :param pulumi.Input[_builtins.str] fallback_ip: Specifies the IPv4 or IPv6 address of the server to which the system directs requests when it cannot use one of its pools
        :param pulumi.Input[_builtins.str] fallback_mode: Specifies the load balancing mode that the system uses if the pool's preferred and alternate modes are unsuccessful
        :param pulumi.Input[_builtins.int] limit_max_bps: Specifies the maximum allowable data throughput rate in bits per second
        :param pulumi.Input[_builtins.str] limit_max_bps_status: Enables or disables the limit_max_bps option
        :param pulumi.Input[_builtins.int] limit_max_connections: Specifies the maximum number of concurrent connections
        :param pulumi.Input[_builtins.str] limit_max_connections_status: Enables or disables the limit_max_connections option
        :param pulumi.Input[_builtins.int] limit_max_pps: Specifies the maximum allowable data transfer rate in packets per second
        :param pulumi.Input[_builtins.str] limit_max_pps_status: Enables or disables the limit_max_pps option
        :param pulumi.Input[_builtins.str] load_balancing_mode: Specifies the preferred load balancing mode for the pool
        :param pulumi.Input[_builtins.str] manual_resume: Specifies whether manual resume is enabled
        :param pulumi.Input[_builtins.int] max_answers_returned: Specifies the maximum number of available virtual servers that the system lists in a response
        :param pulumi.Input[_builtins.str] min_members_up_mode: Specifies whether the minimum number of members must be up for the pool to be active
        :param pulumi.Input[_builtins.int] min_members_up_value: Specifies the minimum number of pool members that must be up
        :param pulumi.Input[_builtins.str] monitor: Specifies the health monitor for the pool
        :param pulumi.Input[_builtins.str] partition: Partition in which the pool resides
        :param pulumi.Input[_builtins.int] qos_hit_ratio: Specifies the weight for QoS hit ratio
        :param pulumi.Input[_builtins.int] qos_hops: Specifies the weight for QoS hops
        :param pulumi.Input[_builtins.int] qos_kilobytes_second: Specifies the weight for QoS kilobytes per second
        :param pulumi.Input[_builtins.int] qos_lcs: Specifies the weight for QoS link capacity
        :param pulumi.Input[_builtins.int] qos_packet_rate: Specifies the weight for QoS packet rate
        :param pulumi.Input[_builtins.int] qos_rtt: Specifies the weight for QoS round trip time
        :param pulumi.Input[_builtins.int] qos_topology: Specifies the weight for QoS topology
        :param pulumi.Input[_builtins.int] qos_vs_capacity: Specifies the weight for QoS virtual server capacity
        :param pulumi.Input[_builtins.int] qos_vs_score: Specifies the weight for QoS virtual server score
        :param pulumi.Input[_builtins.int] ttl: Specifies the time to live (TTL) for the pool
        :param pulumi.Input[_builtins.str] verify_member_availability: Specifies whether the system verifies the availability of pool members before sending traffic
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "type", type)
        if alternate_mode is not None:
            pulumi.set(__self__, "alternate_mode", alternate_mode)
        if disabled is not None:
            pulumi.set(__self__, "disabled", disabled)
        if dynamic_ratio is not None:
            pulumi.set(__self__, "dynamic_ratio", dynamic_ratio)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if fallback_ip is not None:
            pulumi.set(__self__, "fallback_ip", fallback_ip)
        if fallback_mode is not None:
            pulumi.set(__self__, "fallback_mode", fallback_mode)
        if limit_max_bps is not None:
            pulumi.set(__self__, "limit_max_bps", limit_max_bps)
        if limit_max_bps_status is not None:
            pulumi.set(__self__, "limit_max_bps_status", limit_max_bps_status)
        if limit_max_connections is not None:
            pulumi.set(__self__, "limit_max_connections", limit_max_connections)
        if limit_max_connections_status is not None:
            pulumi.set(__self__, "limit_max_connections_status", limit_max_connections_status)
        if limit_max_pps is not None:
            pulumi.set(__self__, "limit_max_pps", limit_max_pps)
        if limit_max_pps_status is not None:
            pulumi.set(__self__, "limit_max_pps_status", limit_max_pps_status)
        if load_balancing_mode is not None:
            pulumi.set(__self__, "load_balancing_mode", load_balancing_mode)
        if manual_resume is not None:
            pulumi.set(__self__, "manual_resume", manual_resume)
        if max_answers_returned is not None:
            pulumi.set(__self__, "max_answers_returned", max_answers_returned)
        if members is not None:
            pulumi.set(__self__, "members", members)
        if min_members_up_mode is not None:
            pulumi.set(__self__, "min_members_up_mode", min_members_up_mode)
        if min_members_up_value is not None:
            pulumi.set(__self__, "min_members_up_value", min_members_up_value)
        if monitor is not None:
            pulumi.set(__self__, "monitor", monitor)
        if partition is not None:
            pulumi.set(__self__, "partition", partition)
        if qos_hit_ratio is not None:
            pulumi.set(__self__, "qos_hit_ratio", qos_hit_ratio)
        if qos_hops is not None:
            pulumi.set(__self__, "qos_hops", qos_hops)
        if qos_kilobytes_second is not None:
            pulumi.set(__self__, "qos_kilobytes_second", qos_kilobytes_second)
        if qos_lcs is not None:
            pulumi.set(__self__, "qos_lcs", qos_lcs)
        if qos_packet_rate is not None:
            pulumi.set(__self__, "qos_packet_rate", qos_packet_rate)
        if qos_rtt is not None:
            pulumi.set(__self__, "qos_rtt", qos_rtt)
        if qos_topology is not None:
            pulumi.set(__self__, "qos_topology", qos_topology)
        if qos_vs_capacity is not None:
            pulumi.set(__self__, "qos_vs_capacity", qos_vs_capacity)
        if qos_vs_score is not None:
            pulumi.set(__self__, "qos_vs_score", qos_vs_score)
        if ttl is not None:
            pulumi.set(__self__, "ttl", ttl)
        if verify_member_availability is not None:
            pulumi.set(__self__, "verify_member_availability", verify_member_availability)

    @_builtins.property
    @pulumi.getter
    def name(self) -> pulumi.Input[_builtins.str]:
        """
        Name of the GTM pool
        """
        return pulumi.get(self, "name")

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

    @_builtins.property
    @pulumi.getter
    def type(self) -> pulumi.Input[_builtins.str]:
        """
        Type of GTM pool (a, aaaa, cname, mx, naptr, srv)
        """
        return pulumi.get(self, "type")

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

    @_builtins.property
    @pulumi.getter(name="alternateMode")
    def alternate_mode(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies the load balancing mode to use if the preferred and alternate modes are unsuccessful
        """
        return pulumi.get(self, "alternate_mode")

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

    @_builtins.property
    @pulumi.getter
    def disabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Disabled state of the pool
        """
        return pulumi.get(self, "disabled")

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

    @_builtins.property
    @pulumi.getter(name="dynamicRatio")
    def dynamic_ratio(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Enables or disables the dynamic ratio load balancing algorithm
        """
        return pulumi.get(self, "dynamic_ratio")

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

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

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

    @_builtins.property
    @pulumi.getter(name="fallbackIp")
    def fallback_ip(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies the IPv4 or IPv6 address of the server to which the system directs requests when it cannot use one of its pools
        """
        return pulumi.get(self, "fallback_ip")

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

    @_builtins.property
    @pulumi.getter(name="fallbackMode")
    def fallback_mode(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies the load balancing mode that the system uses if the pool's preferred and alternate modes are unsuccessful
        """
        return pulumi.get(self, "fallback_mode")

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

    @_builtins.property
    @pulumi.getter(name="limitMaxBps")
    def limit_max_bps(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the maximum allowable data throughput rate in bits per second
        """
        return pulumi.get(self, "limit_max_bps")

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

    @_builtins.property
    @pulumi.getter(name="limitMaxBpsStatus")
    def limit_max_bps_status(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Enables or disables the limit_max_bps option
        """
        return pulumi.get(self, "limit_max_bps_status")

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

    @_builtins.property
    @pulumi.getter(name="limitMaxConnections")
    def limit_max_connections(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the maximum number of concurrent connections
        """
        return pulumi.get(self, "limit_max_connections")

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

    @_builtins.property
    @pulumi.getter(name="limitMaxConnectionsStatus")
    def limit_max_connections_status(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Enables or disables the limit_max_connections option
        """
        return pulumi.get(self, "limit_max_connections_status")

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

    @_builtins.property
    @pulumi.getter(name="limitMaxPps")
    def limit_max_pps(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the maximum allowable data transfer rate in packets per second
        """
        return pulumi.get(self, "limit_max_pps")

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

    @_builtins.property
    @pulumi.getter(name="limitMaxPpsStatus")
    def limit_max_pps_status(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Enables or disables the limit_max_pps option
        """
        return pulumi.get(self, "limit_max_pps_status")

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

    @_builtins.property
    @pulumi.getter(name="loadBalancingMode")
    def load_balancing_mode(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies the preferred load balancing mode for the pool
        """
        return pulumi.get(self, "load_balancing_mode")

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

    @_builtins.property
    @pulumi.getter(name="manualResume")
    def manual_resume(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies whether manual resume is enabled
        """
        return pulumi.get(self, "manual_resume")

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

    @_builtins.property
    @pulumi.getter(name="maxAnswersReturned")
    def max_answers_returned(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the maximum number of available virtual servers that the system lists in a response
        """
        return pulumi.get(self, "max_answers_returned")

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

    @_builtins.property
    @pulumi.getter
    def members(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['GtmPoolMemberArgs']]]]:
        return pulumi.get(self, "members")

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

    @_builtins.property
    @pulumi.getter(name="minMembersUpMode")
    def min_members_up_mode(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies whether the minimum number of members must be up for the pool to be active
        """
        return pulumi.get(self, "min_members_up_mode")

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

    @_builtins.property
    @pulumi.getter(name="minMembersUpValue")
    def min_members_up_value(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the minimum number of pool members that must be up
        """
        return pulumi.get(self, "min_members_up_value")

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

    @_builtins.property
    @pulumi.getter
    def monitor(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies the health monitor for the pool
        """
        return pulumi.get(self, "monitor")

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

    @_builtins.property
    @pulumi.getter
    def partition(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Partition in which the pool resides
        """
        return pulumi.get(self, "partition")

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

    @_builtins.property
    @pulumi.getter(name="qosHitRatio")
    def qos_hit_ratio(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the weight for QoS hit ratio
        """
        return pulumi.get(self, "qos_hit_ratio")

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

    @_builtins.property
    @pulumi.getter(name="qosHops")
    def qos_hops(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the weight for QoS hops
        """
        return pulumi.get(self, "qos_hops")

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

    @_builtins.property
    @pulumi.getter(name="qosKilobytesSecond")
    def qos_kilobytes_second(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the weight for QoS kilobytes per second
        """
        return pulumi.get(self, "qos_kilobytes_second")

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

    @_builtins.property
    @pulumi.getter(name="qosLcs")
    def qos_lcs(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the weight for QoS link capacity
        """
        return pulumi.get(self, "qos_lcs")

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

    @_builtins.property
    @pulumi.getter(name="qosPacketRate")
    def qos_packet_rate(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the weight for QoS packet rate
        """
        return pulumi.get(self, "qos_packet_rate")

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

    @_builtins.property
    @pulumi.getter(name="qosRtt")
    def qos_rtt(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the weight for QoS round trip time
        """
        return pulumi.get(self, "qos_rtt")

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

    @_builtins.property
    @pulumi.getter(name="qosTopology")
    def qos_topology(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the weight for QoS topology
        """
        return pulumi.get(self, "qos_topology")

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

    @_builtins.property
    @pulumi.getter(name="qosVsCapacity")
    def qos_vs_capacity(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the weight for QoS virtual server capacity
        """
        return pulumi.get(self, "qos_vs_capacity")

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

    @_builtins.property
    @pulumi.getter(name="qosVsScore")
    def qos_vs_score(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the weight for QoS virtual server score
        """
        return pulumi.get(self, "qos_vs_score")

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

    @_builtins.property
    @pulumi.getter
    def ttl(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the time to live (TTL) for the pool
        """
        return pulumi.get(self, "ttl")

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

    @_builtins.property
    @pulumi.getter(name="verifyMemberAvailability")
    def verify_member_availability(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies whether the system verifies the availability of pool members before sending traffic
        """
        return pulumi.get(self, "verify_member_availability")

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


@pulumi.input_type
class _GtmPoolState:
    def __init__(__self__, *,
                 alternate_mode: Optional[pulumi.Input[_builtins.str]] = None,
                 disabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dynamic_ratio: Optional[pulumi.Input[_builtins.str]] = None,
                 enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 fallback_ip: Optional[pulumi.Input[_builtins.str]] = None,
                 fallback_mode: Optional[pulumi.Input[_builtins.str]] = None,
                 limit_max_bps: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_max_bps_status: Optional[pulumi.Input[_builtins.str]] = None,
                 limit_max_connections: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_max_connections_status: Optional[pulumi.Input[_builtins.str]] = None,
                 limit_max_pps: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_max_pps_status: Optional[pulumi.Input[_builtins.str]] = None,
                 load_balancing_mode: Optional[pulumi.Input[_builtins.str]] = None,
                 manual_resume: Optional[pulumi.Input[_builtins.str]] = None,
                 max_answers_returned: Optional[pulumi.Input[_builtins.int]] = None,
                 members: Optional[pulumi.Input[Sequence[pulumi.Input['GtmPoolMemberArgs']]]] = None,
                 min_members_up_mode: Optional[pulumi.Input[_builtins.str]] = None,
                 min_members_up_value: Optional[pulumi.Input[_builtins.int]] = None,
                 monitor: Optional[pulumi.Input[_builtins.str]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 partition: Optional[pulumi.Input[_builtins.str]] = None,
                 qos_hit_ratio: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_hops: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_kilobytes_second: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_lcs: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_packet_rate: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_rtt: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_topology: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_vs_capacity: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_vs_score: Optional[pulumi.Input[_builtins.int]] = None,
                 ttl: Optional[pulumi.Input[_builtins.int]] = None,
                 type: Optional[pulumi.Input[_builtins.str]] = None,
                 verify_member_availability: Optional[pulumi.Input[_builtins.str]] = None):
        """
        Input properties used for looking up and filtering GtmPool resources.

        :param pulumi.Input[_builtins.str] alternate_mode: Specifies the load balancing mode to use if the preferred and alternate modes are unsuccessful
        :param pulumi.Input[_builtins.bool] disabled: Disabled state of the pool
        :param pulumi.Input[_builtins.str] dynamic_ratio: Enables or disables the dynamic ratio load balancing algorithm
        :param pulumi.Input[_builtins.bool] enabled: Enable or disable the pool
        :param pulumi.Input[_builtins.str] fallback_ip: Specifies the IPv4 or IPv6 address of the server to which the system directs requests when it cannot use one of its pools
        :param pulumi.Input[_builtins.str] fallback_mode: Specifies the load balancing mode that the system uses if the pool's preferred and alternate modes are unsuccessful
        :param pulumi.Input[_builtins.int] limit_max_bps: Specifies the maximum allowable data throughput rate in bits per second
        :param pulumi.Input[_builtins.str] limit_max_bps_status: Enables or disables the limit_max_bps option
        :param pulumi.Input[_builtins.int] limit_max_connections: Specifies the maximum number of concurrent connections
        :param pulumi.Input[_builtins.str] limit_max_connections_status: Enables or disables the limit_max_connections option
        :param pulumi.Input[_builtins.int] limit_max_pps: Specifies the maximum allowable data transfer rate in packets per second
        :param pulumi.Input[_builtins.str] limit_max_pps_status: Enables or disables the limit_max_pps option
        :param pulumi.Input[_builtins.str] load_balancing_mode: Specifies the preferred load balancing mode for the pool
        :param pulumi.Input[_builtins.str] manual_resume: Specifies whether manual resume is enabled
        :param pulumi.Input[_builtins.int] max_answers_returned: Specifies the maximum number of available virtual servers that the system lists in a response
        :param pulumi.Input[_builtins.str] min_members_up_mode: Specifies whether the minimum number of members must be up for the pool to be active
        :param pulumi.Input[_builtins.int] min_members_up_value: Specifies the minimum number of pool members that must be up
        :param pulumi.Input[_builtins.str] monitor: Specifies the health monitor for the pool
        :param pulumi.Input[_builtins.str] name: Name of the GTM pool
        :param pulumi.Input[_builtins.str] partition: Partition in which the pool resides
        :param pulumi.Input[_builtins.int] qos_hit_ratio: Specifies the weight for QoS hit ratio
        :param pulumi.Input[_builtins.int] qos_hops: Specifies the weight for QoS hops
        :param pulumi.Input[_builtins.int] qos_kilobytes_second: Specifies the weight for QoS kilobytes per second
        :param pulumi.Input[_builtins.int] qos_lcs: Specifies the weight for QoS link capacity
        :param pulumi.Input[_builtins.int] qos_packet_rate: Specifies the weight for QoS packet rate
        :param pulumi.Input[_builtins.int] qos_rtt: Specifies the weight for QoS round trip time
        :param pulumi.Input[_builtins.int] qos_topology: Specifies the weight for QoS topology
        :param pulumi.Input[_builtins.int] qos_vs_capacity: Specifies the weight for QoS virtual server capacity
        :param pulumi.Input[_builtins.int] qos_vs_score: Specifies the weight for QoS virtual server score
        :param pulumi.Input[_builtins.int] ttl: Specifies the time to live (TTL) for the pool
        :param pulumi.Input[_builtins.str] type: Type of GTM pool (a, aaaa, cname, mx, naptr, srv)
        :param pulumi.Input[_builtins.str] verify_member_availability: Specifies whether the system verifies the availability of pool members before sending traffic
        """
        if alternate_mode is not None:
            pulumi.set(__self__, "alternate_mode", alternate_mode)
        if disabled is not None:
            pulumi.set(__self__, "disabled", disabled)
        if dynamic_ratio is not None:
            pulumi.set(__self__, "dynamic_ratio", dynamic_ratio)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if fallback_ip is not None:
            pulumi.set(__self__, "fallback_ip", fallback_ip)
        if fallback_mode is not None:
            pulumi.set(__self__, "fallback_mode", fallback_mode)
        if limit_max_bps is not None:
            pulumi.set(__self__, "limit_max_bps", limit_max_bps)
        if limit_max_bps_status is not None:
            pulumi.set(__self__, "limit_max_bps_status", limit_max_bps_status)
        if limit_max_connections is not None:
            pulumi.set(__self__, "limit_max_connections", limit_max_connections)
        if limit_max_connections_status is not None:
            pulumi.set(__self__, "limit_max_connections_status", limit_max_connections_status)
        if limit_max_pps is not None:
            pulumi.set(__self__, "limit_max_pps", limit_max_pps)
        if limit_max_pps_status is not None:
            pulumi.set(__self__, "limit_max_pps_status", limit_max_pps_status)
        if load_balancing_mode is not None:
            pulumi.set(__self__, "load_balancing_mode", load_balancing_mode)
        if manual_resume is not None:
            pulumi.set(__self__, "manual_resume", manual_resume)
        if max_answers_returned is not None:
            pulumi.set(__self__, "max_answers_returned", max_answers_returned)
        if members is not None:
            pulumi.set(__self__, "members", members)
        if min_members_up_mode is not None:
            pulumi.set(__self__, "min_members_up_mode", min_members_up_mode)
        if min_members_up_value is not None:
            pulumi.set(__self__, "min_members_up_value", min_members_up_value)
        if monitor is not None:
            pulumi.set(__self__, "monitor", monitor)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if partition is not None:
            pulumi.set(__self__, "partition", partition)
        if qos_hit_ratio is not None:
            pulumi.set(__self__, "qos_hit_ratio", qos_hit_ratio)
        if qos_hops is not None:
            pulumi.set(__self__, "qos_hops", qos_hops)
        if qos_kilobytes_second is not None:
            pulumi.set(__self__, "qos_kilobytes_second", qos_kilobytes_second)
        if qos_lcs is not None:
            pulumi.set(__self__, "qos_lcs", qos_lcs)
        if qos_packet_rate is not None:
            pulumi.set(__self__, "qos_packet_rate", qos_packet_rate)
        if qos_rtt is not None:
            pulumi.set(__self__, "qos_rtt", qos_rtt)
        if qos_topology is not None:
            pulumi.set(__self__, "qos_topology", qos_topology)
        if qos_vs_capacity is not None:
            pulumi.set(__self__, "qos_vs_capacity", qos_vs_capacity)
        if qos_vs_score is not None:
            pulumi.set(__self__, "qos_vs_score", qos_vs_score)
        if ttl is not None:
            pulumi.set(__self__, "ttl", ttl)
        if type is not None:
            pulumi.set(__self__, "type", type)
        if verify_member_availability is not None:
            pulumi.set(__self__, "verify_member_availability", verify_member_availability)

    @_builtins.property
    @pulumi.getter(name="alternateMode")
    def alternate_mode(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies the load balancing mode to use if the preferred and alternate modes are unsuccessful
        """
        return pulumi.get(self, "alternate_mode")

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

    @_builtins.property
    @pulumi.getter
    def disabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Disabled state of the pool
        """
        return pulumi.get(self, "disabled")

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

    @_builtins.property
    @pulumi.getter(name="dynamicRatio")
    def dynamic_ratio(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Enables or disables the dynamic ratio load balancing algorithm
        """
        return pulumi.get(self, "dynamic_ratio")

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

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

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

    @_builtins.property
    @pulumi.getter(name="fallbackIp")
    def fallback_ip(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies the IPv4 or IPv6 address of the server to which the system directs requests when it cannot use one of its pools
        """
        return pulumi.get(self, "fallback_ip")

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

    @_builtins.property
    @pulumi.getter(name="fallbackMode")
    def fallback_mode(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies the load balancing mode that the system uses if the pool's preferred and alternate modes are unsuccessful
        """
        return pulumi.get(self, "fallback_mode")

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

    @_builtins.property
    @pulumi.getter(name="limitMaxBps")
    def limit_max_bps(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the maximum allowable data throughput rate in bits per second
        """
        return pulumi.get(self, "limit_max_bps")

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

    @_builtins.property
    @pulumi.getter(name="limitMaxBpsStatus")
    def limit_max_bps_status(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Enables or disables the limit_max_bps option
        """
        return pulumi.get(self, "limit_max_bps_status")

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

    @_builtins.property
    @pulumi.getter(name="limitMaxConnections")
    def limit_max_connections(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the maximum number of concurrent connections
        """
        return pulumi.get(self, "limit_max_connections")

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

    @_builtins.property
    @pulumi.getter(name="limitMaxConnectionsStatus")
    def limit_max_connections_status(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Enables or disables the limit_max_connections option
        """
        return pulumi.get(self, "limit_max_connections_status")

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

    @_builtins.property
    @pulumi.getter(name="limitMaxPps")
    def limit_max_pps(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the maximum allowable data transfer rate in packets per second
        """
        return pulumi.get(self, "limit_max_pps")

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

    @_builtins.property
    @pulumi.getter(name="limitMaxPpsStatus")
    def limit_max_pps_status(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Enables or disables the limit_max_pps option
        """
        return pulumi.get(self, "limit_max_pps_status")

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

    @_builtins.property
    @pulumi.getter(name="loadBalancingMode")
    def load_balancing_mode(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies the preferred load balancing mode for the pool
        """
        return pulumi.get(self, "load_balancing_mode")

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

    @_builtins.property
    @pulumi.getter(name="manualResume")
    def manual_resume(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies whether manual resume is enabled
        """
        return pulumi.get(self, "manual_resume")

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

    @_builtins.property
    @pulumi.getter(name="maxAnswersReturned")
    def max_answers_returned(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the maximum number of available virtual servers that the system lists in a response
        """
        return pulumi.get(self, "max_answers_returned")

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

    @_builtins.property
    @pulumi.getter
    def members(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['GtmPoolMemberArgs']]]]:
        return pulumi.get(self, "members")

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

    @_builtins.property
    @pulumi.getter(name="minMembersUpMode")
    def min_members_up_mode(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies whether the minimum number of members must be up for the pool to be active
        """
        return pulumi.get(self, "min_members_up_mode")

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

    @_builtins.property
    @pulumi.getter(name="minMembersUpValue")
    def min_members_up_value(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the minimum number of pool members that must be up
        """
        return pulumi.get(self, "min_members_up_value")

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

    @_builtins.property
    @pulumi.getter
    def monitor(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies the health monitor for the pool
        """
        return pulumi.get(self, "monitor")

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

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

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

    @_builtins.property
    @pulumi.getter
    def partition(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Partition in which the pool resides
        """
        return pulumi.get(self, "partition")

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

    @_builtins.property
    @pulumi.getter(name="qosHitRatio")
    def qos_hit_ratio(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the weight for QoS hit ratio
        """
        return pulumi.get(self, "qos_hit_ratio")

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

    @_builtins.property
    @pulumi.getter(name="qosHops")
    def qos_hops(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the weight for QoS hops
        """
        return pulumi.get(self, "qos_hops")

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

    @_builtins.property
    @pulumi.getter(name="qosKilobytesSecond")
    def qos_kilobytes_second(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the weight for QoS kilobytes per second
        """
        return pulumi.get(self, "qos_kilobytes_second")

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

    @_builtins.property
    @pulumi.getter(name="qosLcs")
    def qos_lcs(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the weight for QoS link capacity
        """
        return pulumi.get(self, "qos_lcs")

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

    @_builtins.property
    @pulumi.getter(name="qosPacketRate")
    def qos_packet_rate(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the weight for QoS packet rate
        """
        return pulumi.get(self, "qos_packet_rate")

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

    @_builtins.property
    @pulumi.getter(name="qosRtt")
    def qos_rtt(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the weight for QoS round trip time
        """
        return pulumi.get(self, "qos_rtt")

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

    @_builtins.property
    @pulumi.getter(name="qosTopology")
    def qos_topology(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the weight for QoS topology
        """
        return pulumi.get(self, "qos_topology")

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

    @_builtins.property
    @pulumi.getter(name="qosVsCapacity")
    def qos_vs_capacity(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the weight for QoS virtual server capacity
        """
        return pulumi.get(self, "qos_vs_capacity")

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

    @_builtins.property
    @pulumi.getter(name="qosVsScore")
    def qos_vs_score(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the weight for QoS virtual server score
        """
        return pulumi.get(self, "qos_vs_score")

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

    @_builtins.property
    @pulumi.getter
    def ttl(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Specifies the time to live (TTL) for the pool
        """
        return pulumi.get(self, "ttl")

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

    @_builtins.property
    @pulumi.getter
    def type(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Type of GTM pool (a, aaaa, cname, mx, naptr, srv)
        """
        return pulumi.get(self, "type")

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

    @_builtins.property
    @pulumi.getter(name="verifyMemberAvailability")
    def verify_member_availability(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies whether the system verifies the availability of pool members before sending traffic
        """
        return pulumi.get(self, "verify_member_availability")

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


@pulumi.type_token("f5bigip:index/gtmPool:GtmPool")
class GtmPool(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 alternate_mode: Optional[pulumi.Input[_builtins.str]] = None,
                 disabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dynamic_ratio: Optional[pulumi.Input[_builtins.str]] = None,
                 enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 fallback_ip: Optional[pulumi.Input[_builtins.str]] = None,
                 fallback_mode: Optional[pulumi.Input[_builtins.str]] = None,
                 limit_max_bps: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_max_bps_status: Optional[pulumi.Input[_builtins.str]] = None,
                 limit_max_connections: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_max_connections_status: Optional[pulumi.Input[_builtins.str]] = None,
                 limit_max_pps: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_max_pps_status: Optional[pulumi.Input[_builtins.str]] = None,
                 load_balancing_mode: Optional[pulumi.Input[_builtins.str]] = None,
                 manual_resume: Optional[pulumi.Input[_builtins.str]] = None,
                 max_answers_returned: Optional[pulumi.Input[_builtins.int]] = None,
                 members: Optional[pulumi.Input[Sequence[pulumi.Input[Union['GtmPoolMemberArgs', 'GtmPoolMemberArgsDict']]]]] = None,
                 min_members_up_mode: Optional[pulumi.Input[_builtins.str]] = None,
                 min_members_up_value: Optional[pulumi.Input[_builtins.int]] = None,
                 monitor: Optional[pulumi.Input[_builtins.str]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 partition: Optional[pulumi.Input[_builtins.str]] = None,
                 qos_hit_ratio: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_hops: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_kilobytes_second: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_lcs: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_packet_rate: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_rtt: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_topology: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_vs_capacity: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_vs_score: Optional[pulumi.Input[_builtins.int]] = None,
                 ttl: Optional[pulumi.Input[_builtins.int]] = None,
                 type: Optional[pulumi.Input[_builtins.str]] = None,
                 verify_member_availability: Optional[pulumi.Input[_builtins.str]] = None,
                 __props__=None):
        """
        ## # GtmPool Resource

        Provides a BIG-IP GTM (Global Traffic Manager) Pool resource. This resource allows you to configure and manage GTM Pool objects on a BIG-IP system.

        ## Description

        A GTM pool is a collection of virtual servers or other pool members that can be distributed across multiple data centers. GTM pools are used by WideIPs to intelligently distribute DNS traffic based on various load balancing algorithms and health monitoring.

        GTM Pool types correspond to different DNS record types:
        - **a**: IPv4 address pools
        - **aaaa**: IPv6 address pools
        - **cname**: Canonical name pools
        - **mx**: Mail exchange pools
        - **naptr**: Naming authority pointer pools
        - **srv**: Service locator pools

        ## Example Usage

        ### Basic Pool

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        example = f5bigip.GtmPool("example",
            name="my_pool",
            type="a",
            partition="Common",
            load_balancing_mode="round-robin",
            monitor="/Common/https")
        ```

        ### Pool with Members

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        with_members = f5bigip.GtmPool("with_members",
            name="app_pool",
            type="a",
            partition="Common",
            load_balancing_mode="round-robin",
            monitor="/Common/https",
            ttl=30,
            members=[
                {
                    "name": "server1:/Common/vs_app",
                    "enabled": True,
                    "ratio": 1,
                    "member_order": 0,
                },
                {
                    "name": "server2:/Common/vs_app",
                    "enabled": True,
                    "ratio": 1,
                    "member_order": 1,
                },
            ])
        ```

        ### Advanced Pool Configuration

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        advanced = f5bigip.GtmPool("advanced",
            name="advanced_pool",
            type="a",
            partition="Common",
            load_balancing_mode="round-robin",
            alternate_mode="topology",
            fallback_mode="return-to-dns",
            fallback_ip="192.0.2.1",
            max_answers_returned=2,
            ttl=60,
            monitor="/Common/https",
            verify_member_availability="enabled",
            qos_hit_ratio=10,
            qos_hops=5,
            qos_kilobytes_second=5,
            qos_lcs=50,
            qos_packet_rate=5,
            qos_rtt=100,
            limit_max_connections=5000,
            limit_max_connections_status="enabled",
            limit_max_bps=100000000,
            limit_max_bps_status="enabled",
            min_members_up_mode="at-least",
            min_members_up_value=2,
            members=[
                {
                    "name": "server1:/Common/vs_app",
                    "enabled": True,
                    "ratio": 2,
                    "member_order": 0,
                    "monitor": "default",
                    "limit_max_connections": 2000,
                    "limit_max_connections_status": "enabled",
                },
                {
                    "name": "server2:/Common/vs_app",
                    "enabled": True,
                    "ratio": 1,
                    "member_order": 1,
                },
            ])
        ```

        ## Notes

        ### Pool Member Name Format

        Pool members must be specified in the format: `<server_name>:<virtual_server_name>`

        Examples:
        - `server1:/Common/vs_app` - References virtual server `vs_app` on server `server1`
        - `dc1_server:/Prod/app_vs` - References virtual server `app_vs` in partition `Prod` on server `dc1_server`

        The server and virtual server must already exist in the GTM configuration.

        ### Load Balancing Modes

        The `load_balancing_mode` determines how GTM distributes DNS queries across pool members:

        - **round-robin**: Distributes queries equally across all available members
        - **ratio**: Distributes queries based on member ratios
        - **topology**: Uses topology records to determine the best member
        - **global-availability**: Considers member availability and load
        - **virtual-server-capacity**: Based on virtual server capacity
        - **least-connections**: Selects member with fewest active connections
        - **lowest-round-trip-time**: Selects member with lowest RTT
        - **fewest-hops**: Selects member with fewest network hops
        - **packet-rate**: Based on packet transmission rate
        - **cpu**: Based on CPU utilization
        - **completion-rate**: Based on connection completion rate
        - **quality-of-service**: Based on QoS metrics
        - **kilobytes-per-second**: Based on throughput
        - **dynamic-ratio**: Dynamically adjusts member ratios
        - **drop-packet**: Drops DNS packets (used for testing)
        - **fallback-ip**: Returns a fallback IP address
        - **virtual-server-score**: Based on virtual server scores

        ### QoS Weights

        QoS (Quality of Service) weights are used when the load balancing mode is set to `quality-of-service`. Higher weights give more importance to specific metrics:

        - **qos_hit_ratio**: Cache hit ratio
        - **qos_hops**: Number of router hops
        - **qos_kilobytes_second**: Data throughput
        - **qos_lcs**: Link capacity score
        - **qos_packet_rate**: Packet transmission rate
        - **qos_rtt**: Round trip time
        - **qos_topology**: Topology distance
        - **qos_vs_capacity**: Virtual server capacity
        - **qos_vs_score**: Virtual server score

        ### Connection Limits

        Connection limits can be set at both the pool level and individual member level:
        - Pool-level limits apply to the entire pool
        - Member-level limits apply to individual members
        - Both limits must have their corresponding `_status` field set to `enabled` to take effect

        ### Minimum Members

        The `min_members_up_mode` and `min_members_up_value` work together:
        - **off**: No minimum requirement
        - **at-least**: At least `min_members_up_value` members must be up
        - **percent**: At least `min_members_up_value` percent of members must be up

        Example: If you have 5 members and set `min_members_up_mode = "at-least"` and `min_members_up_value = 2`, the pool will be marked down if fewer than 2 members are available.

        ## API Endpoints

        This resource interacts with the following BIG-IP API endpoints:

        - `GET /mgmt/tm/gtm/pool/<type>/<name>?expandSubcollections=true` - Read pool configuration
        - `POST /mgmt/tm/gtm/pool/<type>` - Create pool
        - `PUT /mgmt/tm/gtm/pool/<type>/<name>` - Update pool configuration
        - `DELETE /mgmt/tm/gtm/pool/<type>/<name>` - Delete pool

        ## Related Resources

        - `GtmWideip` - Manages GTM WideIPs that reference pools
        - `GtmServer` - Manages GTM servers that contain virtual servers
        - `GtmDatacenter` - Manages GTM data centers
        - `bigip_gtm_monitor` - Manages GTM health monitors

        ## Import

        GTM Pool resources can be imported using the format `/<partition>/<name>:<type>`. For example:

        ```sh
        $ pulumi import f5bigip:index/gtmPool:GtmPool example /Common/my_pool:a
        ```


        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[_builtins.str] alternate_mode: Specifies the load balancing mode to use if the preferred and alternate modes are unsuccessful
        :param pulumi.Input[_builtins.bool] disabled: Disabled state of the pool
        :param pulumi.Input[_builtins.str] dynamic_ratio: Enables or disables the dynamic ratio load balancing algorithm
        :param pulumi.Input[_builtins.bool] enabled: Enable or disable the pool
        :param pulumi.Input[_builtins.str] fallback_ip: Specifies the IPv4 or IPv6 address of the server to which the system directs requests when it cannot use one of its pools
        :param pulumi.Input[_builtins.str] fallback_mode: Specifies the load balancing mode that the system uses if the pool's preferred and alternate modes are unsuccessful
        :param pulumi.Input[_builtins.int] limit_max_bps: Specifies the maximum allowable data throughput rate in bits per second
        :param pulumi.Input[_builtins.str] limit_max_bps_status: Enables or disables the limit_max_bps option
        :param pulumi.Input[_builtins.int] limit_max_connections: Specifies the maximum number of concurrent connections
        :param pulumi.Input[_builtins.str] limit_max_connections_status: Enables or disables the limit_max_connections option
        :param pulumi.Input[_builtins.int] limit_max_pps: Specifies the maximum allowable data transfer rate in packets per second
        :param pulumi.Input[_builtins.str] limit_max_pps_status: Enables or disables the limit_max_pps option
        :param pulumi.Input[_builtins.str] load_balancing_mode: Specifies the preferred load balancing mode for the pool
        :param pulumi.Input[_builtins.str] manual_resume: Specifies whether manual resume is enabled
        :param pulumi.Input[_builtins.int] max_answers_returned: Specifies the maximum number of available virtual servers that the system lists in a response
        :param pulumi.Input[_builtins.str] min_members_up_mode: Specifies whether the minimum number of members must be up for the pool to be active
        :param pulumi.Input[_builtins.int] min_members_up_value: Specifies the minimum number of pool members that must be up
        :param pulumi.Input[_builtins.str] monitor: Specifies the health monitor for the pool
        :param pulumi.Input[_builtins.str] name: Name of the GTM pool
        :param pulumi.Input[_builtins.str] partition: Partition in which the pool resides
        :param pulumi.Input[_builtins.int] qos_hit_ratio: Specifies the weight for QoS hit ratio
        :param pulumi.Input[_builtins.int] qos_hops: Specifies the weight for QoS hops
        :param pulumi.Input[_builtins.int] qos_kilobytes_second: Specifies the weight for QoS kilobytes per second
        :param pulumi.Input[_builtins.int] qos_lcs: Specifies the weight for QoS link capacity
        :param pulumi.Input[_builtins.int] qos_packet_rate: Specifies the weight for QoS packet rate
        :param pulumi.Input[_builtins.int] qos_rtt: Specifies the weight for QoS round trip time
        :param pulumi.Input[_builtins.int] qos_topology: Specifies the weight for QoS topology
        :param pulumi.Input[_builtins.int] qos_vs_capacity: Specifies the weight for QoS virtual server capacity
        :param pulumi.Input[_builtins.int] qos_vs_score: Specifies the weight for QoS virtual server score
        :param pulumi.Input[_builtins.int] ttl: Specifies the time to live (TTL) for the pool
        :param pulumi.Input[_builtins.str] type: Type of GTM pool (a, aaaa, cname, mx, naptr, srv)
        :param pulumi.Input[_builtins.str] verify_member_availability: Specifies whether the system verifies the availability of pool members before sending traffic
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: GtmPoolArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        ## # GtmPool Resource

        Provides a BIG-IP GTM (Global Traffic Manager) Pool resource. This resource allows you to configure and manage GTM Pool objects on a BIG-IP system.

        ## Description

        A GTM pool is a collection of virtual servers or other pool members that can be distributed across multiple data centers. GTM pools are used by WideIPs to intelligently distribute DNS traffic based on various load balancing algorithms and health monitoring.

        GTM Pool types correspond to different DNS record types:
        - **a**: IPv4 address pools
        - **aaaa**: IPv6 address pools
        - **cname**: Canonical name pools
        - **mx**: Mail exchange pools
        - **naptr**: Naming authority pointer pools
        - **srv**: Service locator pools

        ## Example Usage

        ### Basic Pool

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        example = f5bigip.GtmPool("example",
            name="my_pool",
            type="a",
            partition="Common",
            load_balancing_mode="round-robin",
            monitor="/Common/https")
        ```

        ### Pool with Members

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        with_members = f5bigip.GtmPool("with_members",
            name="app_pool",
            type="a",
            partition="Common",
            load_balancing_mode="round-robin",
            monitor="/Common/https",
            ttl=30,
            members=[
                {
                    "name": "server1:/Common/vs_app",
                    "enabled": True,
                    "ratio": 1,
                    "member_order": 0,
                },
                {
                    "name": "server2:/Common/vs_app",
                    "enabled": True,
                    "ratio": 1,
                    "member_order": 1,
                },
            ])
        ```

        ### Advanced Pool Configuration

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        advanced = f5bigip.GtmPool("advanced",
            name="advanced_pool",
            type="a",
            partition="Common",
            load_balancing_mode="round-robin",
            alternate_mode="topology",
            fallback_mode="return-to-dns",
            fallback_ip="192.0.2.1",
            max_answers_returned=2,
            ttl=60,
            monitor="/Common/https",
            verify_member_availability="enabled",
            qos_hit_ratio=10,
            qos_hops=5,
            qos_kilobytes_second=5,
            qos_lcs=50,
            qos_packet_rate=5,
            qos_rtt=100,
            limit_max_connections=5000,
            limit_max_connections_status="enabled",
            limit_max_bps=100000000,
            limit_max_bps_status="enabled",
            min_members_up_mode="at-least",
            min_members_up_value=2,
            members=[
                {
                    "name": "server1:/Common/vs_app",
                    "enabled": True,
                    "ratio": 2,
                    "member_order": 0,
                    "monitor": "default",
                    "limit_max_connections": 2000,
                    "limit_max_connections_status": "enabled",
                },
                {
                    "name": "server2:/Common/vs_app",
                    "enabled": True,
                    "ratio": 1,
                    "member_order": 1,
                },
            ])
        ```

        ## Notes

        ### Pool Member Name Format

        Pool members must be specified in the format: `<server_name>:<virtual_server_name>`

        Examples:
        - `server1:/Common/vs_app` - References virtual server `vs_app` on server `server1`
        - `dc1_server:/Prod/app_vs` - References virtual server `app_vs` in partition `Prod` on server `dc1_server`

        The server and virtual server must already exist in the GTM configuration.

        ### Load Balancing Modes

        The `load_balancing_mode` determines how GTM distributes DNS queries across pool members:

        - **round-robin**: Distributes queries equally across all available members
        - **ratio**: Distributes queries based on member ratios
        - **topology**: Uses topology records to determine the best member
        - **global-availability**: Considers member availability and load
        - **virtual-server-capacity**: Based on virtual server capacity
        - **least-connections**: Selects member with fewest active connections
        - **lowest-round-trip-time**: Selects member with lowest RTT
        - **fewest-hops**: Selects member with fewest network hops
        - **packet-rate**: Based on packet transmission rate
        - **cpu**: Based on CPU utilization
        - **completion-rate**: Based on connection completion rate
        - **quality-of-service**: Based on QoS metrics
        - **kilobytes-per-second**: Based on throughput
        - **dynamic-ratio**: Dynamically adjusts member ratios
        - **drop-packet**: Drops DNS packets (used for testing)
        - **fallback-ip**: Returns a fallback IP address
        - **virtual-server-score**: Based on virtual server scores

        ### QoS Weights

        QoS (Quality of Service) weights are used when the load balancing mode is set to `quality-of-service`. Higher weights give more importance to specific metrics:

        - **qos_hit_ratio**: Cache hit ratio
        - **qos_hops**: Number of router hops
        - **qos_kilobytes_second**: Data throughput
        - **qos_lcs**: Link capacity score
        - **qos_packet_rate**: Packet transmission rate
        - **qos_rtt**: Round trip time
        - **qos_topology**: Topology distance
        - **qos_vs_capacity**: Virtual server capacity
        - **qos_vs_score**: Virtual server score

        ### Connection Limits

        Connection limits can be set at both the pool level and individual member level:
        - Pool-level limits apply to the entire pool
        - Member-level limits apply to individual members
        - Both limits must have their corresponding `_status` field set to `enabled` to take effect

        ### Minimum Members

        The `min_members_up_mode` and `min_members_up_value` work together:
        - **off**: No minimum requirement
        - **at-least**: At least `min_members_up_value` members must be up
        - **percent**: At least `min_members_up_value` percent of members must be up

        Example: If you have 5 members and set `min_members_up_mode = "at-least"` and `min_members_up_value = 2`, the pool will be marked down if fewer than 2 members are available.

        ## API Endpoints

        This resource interacts with the following BIG-IP API endpoints:

        - `GET /mgmt/tm/gtm/pool/<type>/<name>?expandSubcollections=true` - Read pool configuration
        - `POST /mgmt/tm/gtm/pool/<type>` - Create pool
        - `PUT /mgmt/tm/gtm/pool/<type>/<name>` - Update pool configuration
        - `DELETE /mgmt/tm/gtm/pool/<type>/<name>` - Delete pool

        ## Related Resources

        - `GtmWideip` - Manages GTM WideIPs that reference pools
        - `GtmServer` - Manages GTM servers that contain virtual servers
        - `GtmDatacenter` - Manages GTM data centers
        - `bigip_gtm_monitor` - Manages GTM health monitors

        ## Import

        GTM Pool resources can be imported using the format `/<partition>/<name>:<type>`. For example:

        ```sh
        $ pulumi import f5bigip:index/gtmPool:GtmPool example /Common/my_pool:a
        ```


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

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 alternate_mode: Optional[pulumi.Input[_builtins.str]] = None,
                 disabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dynamic_ratio: Optional[pulumi.Input[_builtins.str]] = None,
                 enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 fallback_ip: Optional[pulumi.Input[_builtins.str]] = None,
                 fallback_mode: Optional[pulumi.Input[_builtins.str]] = None,
                 limit_max_bps: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_max_bps_status: Optional[pulumi.Input[_builtins.str]] = None,
                 limit_max_connections: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_max_connections_status: Optional[pulumi.Input[_builtins.str]] = None,
                 limit_max_pps: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_max_pps_status: Optional[pulumi.Input[_builtins.str]] = None,
                 load_balancing_mode: Optional[pulumi.Input[_builtins.str]] = None,
                 manual_resume: Optional[pulumi.Input[_builtins.str]] = None,
                 max_answers_returned: Optional[pulumi.Input[_builtins.int]] = None,
                 members: Optional[pulumi.Input[Sequence[pulumi.Input[Union['GtmPoolMemberArgs', 'GtmPoolMemberArgsDict']]]]] = None,
                 min_members_up_mode: Optional[pulumi.Input[_builtins.str]] = None,
                 min_members_up_value: Optional[pulumi.Input[_builtins.int]] = None,
                 monitor: Optional[pulumi.Input[_builtins.str]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 partition: Optional[pulumi.Input[_builtins.str]] = None,
                 qos_hit_ratio: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_hops: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_kilobytes_second: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_lcs: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_packet_rate: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_rtt: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_topology: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_vs_capacity: Optional[pulumi.Input[_builtins.int]] = None,
                 qos_vs_score: Optional[pulumi.Input[_builtins.int]] = None,
                 ttl: Optional[pulumi.Input[_builtins.int]] = None,
                 type: Optional[pulumi.Input[_builtins.str]] = None,
                 verify_member_availability: Optional[pulumi.Input[_builtins.str]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = GtmPoolArgs.__new__(GtmPoolArgs)

            __props__.__dict__["alternate_mode"] = alternate_mode
            __props__.__dict__["disabled"] = disabled
            __props__.__dict__["dynamic_ratio"] = dynamic_ratio
            __props__.__dict__["enabled"] = enabled
            __props__.__dict__["fallback_ip"] = fallback_ip
            __props__.__dict__["fallback_mode"] = fallback_mode
            __props__.__dict__["limit_max_bps"] = limit_max_bps
            __props__.__dict__["limit_max_bps_status"] = limit_max_bps_status
            __props__.__dict__["limit_max_connections"] = limit_max_connections
            __props__.__dict__["limit_max_connections_status"] = limit_max_connections_status
            __props__.__dict__["limit_max_pps"] = limit_max_pps
            __props__.__dict__["limit_max_pps_status"] = limit_max_pps_status
            __props__.__dict__["load_balancing_mode"] = load_balancing_mode
            __props__.__dict__["manual_resume"] = manual_resume
            __props__.__dict__["max_answers_returned"] = max_answers_returned
            __props__.__dict__["members"] = members
            __props__.__dict__["min_members_up_mode"] = min_members_up_mode
            __props__.__dict__["min_members_up_value"] = min_members_up_value
            __props__.__dict__["monitor"] = monitor
            if name is None and not opts.urn:
                raise TypeError("Missing required property 'name'")
            __props__.__dict__["name"] = name
            __props__.__dict__["partition"] = partition
            __props__.__dict__["qos_hit_ratio"] = qos_hit_ratio
            __props__.__dict__["qos_hops"] = qos_hops
            __props__.__dict__["qos_kilobytes_second"] = qos_kilobytes_second
            __props__.__dict__["qos_lcs"] = qos_lcs
            __props__.__dict__["qos_packet_rate"] = qos_packet_rate
            __props__.__dict__["qos_rtt"] = qos_rtt
            __props__.__dict__["qos_topology"] = qos_topology
            __props__.__dict__["qos_vs_capacity"] = qos_vs_capacity
            __props__.__dict__["qos_vs_score"] = qos_vs_score
            __props__.__dict__["ttl"] = ttl
            if type is None and not opts.urn:
                raise TypeError("Missing required property 'type'")
            __props__.__dict__["type"] = type
            __props__.__dict__["verify_member_availability"] = verify_member_availability
        super(GtmPool, __self__).__init__(
            'f5bigip:index/gtmPool:GtmPool',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            alternate_mode: Optional[pulumi.Input[_builtins.str]] = None,
            disabled: Optional[pulumi.Input[_builtins.bool]] = None,
            dynamic_ratio: Optional[pulumi.Input[_builtins.str]] = None,
            enabled: Optional[pulumi.Input[_builtins.bool]] = None,
            fallback_ip: Optional[pulumi.Input[_builtins.str]] = None,
            fallback_mode: Optional[pulumi.Input[_builtins.str]] = None,
            limit_max_bps: Optional[pulumi.Input[_builtins.int]] = None,
            limit_max_bps_status: Optional[pulumi.Input[_builtins.str]] = None,
            limit_max_connections: Optional[pulumi.Input[_builtins.int]] = None,
            limit_max_connections_status: Optional[pulumi.Input[_builtins.str]] = None,
            limit_max_pps: Optional[pulumi.Input[_builtins.int]] = None,
            limit_max_pps_status: Optional[pulumi.Input[_builtins.str]] = None,
            load_balancing_mode: Optional[pulumi.Input[_builtins.str]] = None,
            manual_resume: Optional[pulumi.Input[_builtins.str]] = None,
            max_answers_returned: Optional[pulumi.Input[_builtins.int]] = None,
            members: Optional[pulumi.Input[Sequence[pulumi.Input[Union['GtmPoolMemberArgs', 'GtmPoolMemberArgsDict']]]]] = None,
            min_members_up_mode: Optional[pulumi.Input[_builtins.str]] = None,
            min_members_up_value: Optional[pulumi.Input[_builtins.int]] = None,
            monitor: Optional[pulumi.Input[_builtins.str]] = None,
            name: Optional[pulumi.Input[_builtins.str]] = None,
            partition: Optional[pulumi.Input[_builtins.str]] = None,
            qos_hit_ratio: Optional[pulumi.Input[_builtins.int]] = None,
            qos_hops: Optional[pulumi.Input[_builtins.int]] = None,
            qos_kilobytes_second: Optional[pulumi.Input[_builtins.int]] = None,
            qos_lcs: Optional[pulumi.Input[_builtins.int]] = None,
            qos_packet_rate: Optional[pulumi.Input[_builtins.int]] = None,
            qos_rtt: Optional[pulumi.Input[_builtins.int]] = None,
            qos_topology: Optional[pulumi.Input[_builtins.int]] = None,
            qos_vs_capacity: Optional[pulumi.Input[_builtins.int]] = None,
            qos_vs_score: Optional[pulumi.Input[_builtins.int]] = None,
            ttl: Optional[pulumi.Input[_builtins.int]] = None,
            type: Optional[pulumi.Input[_builtins.str]] = None,
            verify_member_availability: Optional[pulumi.Input[_builtins.str]] = None) -> 'GtmPool':
        """
        Get an existing GtmPool resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[_builtins.str] alternate_mode: Specifies the load balancing mode to use if the preferred and alternate modes are unsuccessful
        :param pulumi.Input[_builtins.bool] disabled: Disabled state of the pool
        :param pulumi.Input[_builtins.str] dynamic_ratio: Enables or disables the dynamic ratio load balancing algorithm
        :param pulumi.Input[_builtins.bool] enabled: Enable or disable the pool
        :param pulumi.Input[_builtins.str] fallback_ip: Specifies the IPv4 or IPv6 address of the server to which the system directs requests when it cannot use one of its pools
        :param pulumi.Input[_builtins.str] fallback_mode: Specifies the load balancing mode that the system uses if the pool's preferred and alternate modes are unsuccessful
        :param pulumi.Input[_builtins.int] limit_max_bps: Specifies the maximum allowable data throughput rate in bits per second
        :param pulumi.Input[_builtins.str] limit_max_bps_status: Enables or disables the limit_max_bps option
        :param pulumi.Input[_builtins.int] limit_max_connections: Specifies the maximum number of concurrent connections
        :param pulumi.Input[_builtins.str] limit_max_connections_status: Enables or disables the limit_max_connections option
        :param pulumi.Input[_builtins.int] limit_max_pps: Specifies the maximum allowable data transfer rate in packets per second
        :param pulumi.Input[_builtins.str] limit_max_pps_status: Enables or disables the limit_max_pps option
        :param pulumi.Input[_builtins.str] load_balancing_mode: Specifies the preferred load balancing mode for the pool
        :param pulumi.Input[_builtins.str] manual_resume: Specifies whether manual resume is enabled
        :param pulumi.Input[_builtins.int] max_answers_returned: Specifies the maximum number of available virtual servers that the system lists in a response
        :param pulumi.Input[_builtins.str] min_members_up_mode: Specifies whether the minimum number of members must be up for the pool to be active
        :param pulumi.Input[_builtins.int] min_members_up_value: Specifies the minimum number of pool members that must be up
        :param pulumi.Input[_builtins.str] monitor: Specifies the health monitor for the pool
        :param pulumi.Input[_builtins.str] name: Name of the GTM pool
        :param pulumi.Input[_builtins.str] partition: Partition in which the pool resides
        :param pulumi.Input[_builtins.int] qos_hit_ratio: Specifies the weight for QoS hit ratio
        :param pulumi.Input[_builtins.int] qos_hops: Specifies the weight for QoS hops
        :param pulumi.Input[_builtins.int] qos_kilobytes_second: Specifies the weight for QoS kilobytes per second
        :param pulumi.Input[_builtins.int] qos_lcs: Specifies the weight for QoS link capacity
        :param pulumi.Input[_builtins.int] qos_packet_rate: Specifies the weight for QoS packet rate
        :param pulumi.Input[_builtins.int] qos_rtt: Specifies the weight for QoS round trip time
        :param pulumi.Input[_builtins.int] qos_topology: Specifies the weight for QoS topology
        :param pulumi.Input[_builtins.int] qos_vs_capacity: Specifies the weight for QoS virtual server capacity
        :param pulumi.Input[_builtins.int] qos_vs_score: Specifies the weight for QoS virtual server score
        :param pulumi.Input[_builtins.int] ttl: Specifies the time to live (TTL) for the pool
        :param pulumi.Input[_builtins.str] type: Type of GTM pool (a, aaaa, cname, mx, naptr, srv)
        :param pulumi.Input[_builtins.str] verify_member_availability: Specifies whether the system verifies the availability of pool members before sending traffic
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _GtmPoolState.__new__(_GtmPoolState)

        __props__.__dict__["alternate_mode"] = alternate_mode
        __props__.__dict__["disabled"] = disabled
        __props__.__dict__["dynamic_ratio"] = dynamic_ratio
        __props__.__dict__["enabled"] = enabled
        __props__.__dict__["fallback_ip"] = fallback_ip
        __props__.__dict__["fallback_mode"] = fallback_mode
        __props__.__dict__["limit_max_bps"] = limit_max_bps
        __props__.__dict__["limit_max_bps_status"] = limit_max_bps_status
        __props__.__dict__["limit_max_connections"] = limit_max_connections
        __props__.__dict__["limit_max_connections_status"] = limit_max_connections_status
        __props__.__dict__["limit_max_pps"] = limit_max_pps
        __props__.__dict__["limit_max_pps_status"] = limit_max_pps_status
        __props__.__dict__["load_balancing_mode"] = load_balancing_mode
        __props__.__dict__["manual_resume"] = manual_resume
        __props__.__dict__["max_answers_returned"] = max_answers_returned
        __props__.__dict__["members"] = members
        __props__.__dict__["min_members_up_mode"] = min_members_up_mode
        __props__.__dict__["min_members_up_value"] = min_members_up_value
        __props__.__dict__["monitor"] = monitor
        __props__.__dict__["name"] = name
        __props__.__dict__["partition"] = partition
        __props__.__dict__["qos_hit_ratio"] = qos_hit_ratio
        __props__.__dict__["qos_hops"] = qos_hops
        __props__.__dict__["qos_kilobytes_second"] = qos_kilobytes_second
        __props__.__dict__["qos_lcs"] = qos_lcs
        __props__.__dict__["qos_packet_rate"] = qos_packet_rate
        __props__.__dict__["qos_rtt"] = qos_rtt
        __props__.__dict__["qos_topology"] = qos_topology
        __props__.__dict__["qos_vs_capacity"] = qos_vs_capacity
        __props__.__dict__["qos_vs_score"] = qos_vs_score
        __props__.__dict__["ttl"] = ttl
        __props__.__dict__["type"] = type
        __props__.__dict__["verify_member_availability"] = verify_member_availability
        return GtmPool(resource_name, opts=opts, __props__=__props__)

    @_builtins.property
    @pulumi.getter(name="alternateMode")
    def alternate_mode(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Specifies the load balancing mode to use if the preferred and alternate modes are unsuccessful
        """
        return pulumi.get(self, "alternate_mode")

    @_builtins.property
    @pulumi.getter
    def disabled(self) -> pulumi.Output[Optional[_builtins.bool]]:
        """
        Disabled state of the pool
        """
        return pulumi.get(self, "disabled")

    @_builtins.property
    @pulumi.getter(name="dynamicRatio")
    def dynamic_ratio(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Enables or disables the dynamic ratio load balancing algorithm
        """
        return pulumi.get(self, "dynamic_ratio")

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

    @_builtins.property
    @pulumi.getter(name="fallbackIp")
    def fallback_ip(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Specifies the IPv4 or IPv6 address of the server to which the system directs requests when it cannot use one of its pools
        """
        return pulumi.get(self, "fallback_ip")

    @_builtins.property
    @pulumi.getter(name="fallbackMode")
    def fallback_mode(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Specifies the load balancing mode that the system uses if the pool's preferred and alternate modes are unsuccessful
        """
        return pulumi.get(self, "fallback_mode")

    @_builtins.property
    @pulumi.getter(name="limitMaxBps")
    def limit_max_bps(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Specifies the maximum allowable data throughput rate in bits per second
        """
        return pulumi.get(self, "limit_max_bps")

    @_builtins.property
    @pulumi.getter(name="limitMaxBpsStatus")
    def limit_max_bps_status(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Enables or disables the limit_max_bps option
        """
        return pulumi.get(self, "limit_max_bps_status")

    @_builtins.property
    @pulumi.getter(name="limitMaxConnections")
    def limit_max_connections(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Specifies the maximum number of concurrent connections
        """
        return pulumi.get(self, "limit_max_connections")

    @_builtins.property
    @pulumi.getter(name="limitMaxConnectionsStatus")
    def limit_max_connections_status(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Enables or disables the limit_max_connections option
        """
        return pulumi.get(self, "limit_max_connections_status")

    @_builtins.property
    @pulumi.getter(name="limitMaxPps")
    def limit_max_pps(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Specifies the maximum allowable data transfer rate in packets per second
        """
        return pulumi.get(self, "limit_max_pps")

    @_builtins.property
    @pulumi.getter(name="limitMaxPpsStatus")
    def limit_max_pps_status(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Enables or disables the limit_max_pps option
        """
        return pulumi.get(self, "limit_max_pps_status")

    @_builtins.property
    @pulumi.getter(name="loadBalancingMode")
    def load_balancing_mode(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Specifies the preferred load balancing mode for the pool
        """
        return pulumi.get(self, "load_balancing_mode")

    @_builtins.property
    @pulumi.getter(name="manualResume")
    def manual_resume(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Specifies whether manual resume is enabled
        """
        return pulumi.get(self, "manual_resume")

    @_builtins.property
    @pulumi.getter(name="maxAnswersReturned")
    def max_answers_returned(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Specifies the maximum number of available virtual servers that the system lists in a response
        """
        return pulumi.get(self, "max_answers_returned")

    @_builtins.property
    @pulumi.getter
    def members(self) -> pulumi.Output[Optional[Sequence['outputs.GtmPoolMember']]]:
        return pulumi.get(self, "members")

    @_builtins.property
    @pulumi.getter(name="minMembersUpMode")
    def min_members_up_mode(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Specifies whether the minimum number of members must be up for the pool to be active
        """
        return pulumi.get(self, "min_members_up_mode")

    @_builtins.property
    @pulumi.getter(name="minMembersUpValue")
    def min_members_up_value(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Specifies the minimum number of pool members that must be up
        """
        return pulumi.get(self, "min_members_up_value")

    @_builtins.property
    @pulumi.getter
    def monitor(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Specifies the health monitor for the pool
        """
        return pulumi.get(self, "monitor")

    @_builtins.property
    @pulumi.getter
    def name(self) -> pulumi.Output[_builtins.str]:
        """
        Name of the GTM pool
        """
        return pulumi.get(self, "name")

    @_builtins.property
    @pulumi.getter
    def partition(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Partition in which the pool resides
        """
        return pulumi.get(self, "partition")

    @_builtins.property
    @pulumi.getter(name="qosHitRatio")
    def qos_hit_ratio(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Specifies the weight for QoS hit ratio
        """
        return pulumi.get(self, "qos_hit_ratio")

    @_builtins.property
    @pulumi.getter(name="qosHops")
    def qos_hops(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Specifies the weight for QoS hops
        """
        return pulumi.get(self, "qos_hops")

    @_builtins.property
    @pulumi.getter(name="qosKilobytesSecond")
    def qos_kilobytes_second(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Specifies the weight for QoS kilobytes per second
        """
        return pulumi.get(self, "qos_kilobytes_second")

    @_builtins.property
    @pulumi.getter(name="qosLcs")
    def qos_lcs(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Specifies the weight for QoS link capacity
        """
        return pulumi.get(self, "qos_lcs")

    @_builtins.property
    @pulumi.getter(name="qosPacketRate")
    def qos_packet_rate(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Specifies the weight for QoS packet rate
        """
        return pulumi.get(self, "qos_packet_rate")

    @_builtins.property
    @pulumi.getter(name="qosRtt")
    def qos_rtt(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Specifies the weight for QoS round trip time
        """
        return pulumi.get(self, "qos_rtt")

    @_builtins.property
    @pulumi.getter(name="qosTopology")
    def qos_topology(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Specifies the weight for QoS topology
        """
        return pulumi.get(self, "qos_topology")

    @_builtins.property
    @pulumi.getter(name="qosVsCapacity")
    def qos_vs_capacity(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Specifies the weight for QoS virtual server capacity
        """
        return pulumi.get(self, "qos_vs_capacity")

    @_builtins.property
    @pulumi.getter(name="qosVsScore")
    def qos_vs_score(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Specifies the weight for QoS virtual server score
        """
        return pulumi.get(self, "qos_vs_score")

    @_builtins.property
    @pulumi.getter
    def ttl(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Specifies the time to live (TTL) for the pool
        """
        return pulumi.get(self, "ttl")

    @_builtins.property
    @pulumi.getter
    def type(self) -> pulumi.Output[_builtins.str]:
        """
        Type of GTM pool (a, aaaa, cname, mx, naptr, srv)
        """
        return pulumi.get(self, "type")

    @_builtins.property
    @pulumi.getter(name="verifyMemberAvailability")
    def verify_member_availability(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Specifies whether the system verifies the availability of pool members before sending traffic
        """
        return pulumi.get(self, "verify_member_availability")

