# 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__ = ['GtmServerArgs', 'GtmServer']

@pulumi.input_type
class GtmServerArgs:
    def __init__(__self__, *,
                 datacenter: pulumi.Input[_builtins.str],
                 name: pulumi.Input[_builtins.str],
                 addresses: Optional[pulumi.Input[Sequence[pulumi.Input['GtmServerAddressArgs']]]] = None,
                 description: Optional[pulumi.Input[_builtins.str]] = None,
                 enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 expose_route_domains: Optional[pulumi.Input[_builtins.bool]] = None,
                 iq_allow_path: Optional[pulumi.Input[_builtins.bool]] = None,
                 iq_allow_service_check: Optional[pulumi.Input[_builtins.bool]] = None,
                 iq_allow_snmp: Optional[pulumi.Input[_builtins.bool]] = None,
                 limit_cpu_usage: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_cpu_usage_status: 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,
                 limit_mem_avail: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_mem_avail_status: Optional[pulumi.Input[_builtins.str]] = None,
                 link_discovery: Optional[pulumi.Input[_builtins.str]] = None,
                 monitor: Optional[pulumi.Input[_builtins.str]] = None,
                 partition: Optional[pulumi.Input[_builtins.str]] = None,
                 prober_fallback: Optional[pulumi.Input[_builtins.str]] = None,
                 prober_pool: Optional[pulumi.Input[_builtins.str]] = None,
                 prober_preference: Optional[pulumi.Input[_builtins.str]] = None,
                 product: Optional[pulumi.Input[_builtins.str]] = None,
                 virtual_server_discovery: Optional[pulumi.Input[_builtins.str]] = None,
                 virtual_servers: Optional[pulumi.Input[Sequence[pulumi.Input['GtmServerVirtualServerArgs']]]] = None):
        """
        The set of arguments for constructing a GtmServer resource.

        :param pulumi.Input[_builtins.str] datacenter: The datacenter where this server resides. Must be a valid datacenter name or full path (e.g., `/Common/datacenter1`).
        :param pulumi.Input[_builtins.str] name: Name of the GTM server. Must be unique within the partition.
        :param pulumi.Input[Sequence[pulumi.Input['GtmServerAddressArgs']]] addresses: List of IP addresses for the server. Each address block supports:
        :param pulumi.Input[_builtins.str] description: Description of the GTM server
        :param pulumi.Input[_builtins.bool] enabled: Enable or disable the GTM server
        :param pulumi.Input[_builtins.bool] expose_route_domains: Allow GTM server to expose route domains. Default is `false`.
        :param pulumi.Input[_builtins.bool] iq_allow_path: Enable iQuery path probing. Default is `true`.
        :param pulumi.Input[_builtins.bool] iq_allow_service_check: Enable iQuery service checking. Default is `true`.
        :param pulumi.Input[_builtins.bool] iq_allow_snmp: Enable iQuery SNMP. Default is `true`.
        :param pulumi.Input[_builtins.int] limit_cpu_usage: Maximum CPU usage allowed (percent). 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_cpu_usage_status: CPU usage limit status.
        :param pulumi.Input[_builtins.int] limit_max_bps: Maximum bits per second. 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_max_bps_status: Maximum bps limit status.
        :param pulumi.Input[_builtins.int] limit_max_connections: Maximum concurrent connections. 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_max_connections_status: Maximum connections limit status.
        :param pulumi.Input[_builtins.int] limit_max_pps: Maximum packets per second. 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_max_pps_status: Maximum pps limit status.
        :param pulumi.Input[_builtins.int] limit_mem_avail: Available memory limit (MB). 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_mem_avail_status: Available memory limit status.
        :param pulumi.Input[_builtins.str] link_discovery: Link discovery mode. Valid values:
        :param pulumi.Input[_builtins.str] monitor: Monitor assigned to check server health (e.g., `/Common/bigip`, `/Common/tcp`).
        :param pulumi.Input[_builtins.str] partition: Partition or tenant the server belongs to. Default is `Common`.
        :param pulumi.Input[_builtins.str] prober_fallback: Fallback prober selection. Valid values:
        :param pulumi.Input[_builtins.str] prober_pool: Prober pool to use when prober_preference or prober_fallback is set to pool
        :param pulumi.Input[_builtins.str] prober_preference: Preferred type of prober. Valid values:
        :param pulumi.Input[_builtins.str] product: Type of server. Valid values are:
        :param pulumi.Input[_builtins.str] virtual_server_discovery: Enable or disable virtual server discovery. Default is `true`. When enabled, GTM automatically discovers virtual servers on BIG-IP systems.
        :param pulumi.Input[Sequence[pulumi.Input['GtmServerVirtualServerArgs']]] virtual_servers: List of virtual servers for the GTM server. This is particularly useful for generic-host servers where virtual server discovery is not available. Each virtual_servers block supports:
        """
        pulumi.set(__self__, "datacenter", datacenter)
        pulumi.set(__self__, "name", name)
        if addresses is not None:
            pulumi.set(__self__, "addresses", addresses)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if expose_route_domains is not None:
            pulumi.set(__self__, "expose_route_domains", expose_route_domains)
        if iq_allow_path is not None:
            pulumi.set(__self__, "iq_allow_path", iq_allow_path)
        if iq_allow_service_check is not None:
            pulumi.set(__self__, "iq_allow_service_check", iq_allow_service_check)
        if iq_allow_snmp is not None:
            pulumi.set(__self__, "iq_allow_snmp", iq_allow_snmp)
        if limit_cpu_usage is not None:
            pulumi.set(__self__, "limit_cpu_usage", limit_cpu_usage)
        if limit_cpu_usage_status is not None:
            pulumi.set(__self__, "limit_cpu_usage_status", limit_cpu_usage_status)
        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 limit_mem_avail is not None:
            pulumi.set(__self__, "limit_mem_avail", limit_mem_avail)
        if limit_mem_avail_status is not None:
            pulumi.set(__self__, "limit_mem_avail_status", limit_mem_avail_status)
        if link_discovery is not None:
            pulumi.set(__self__, "link_discovery", link_discovery)
        if monitor is not None:
            pulumi.set(__self__, "monitor", monitor)
        if partition is not None:
            pulumi.set(__self__, "partition", partition)
        if prober_fallback is not None:
            pulumi.set(__self__, "prober_fallback", prober_fallback)
        if prober_pool is not None:
            pulumi.set(__self__, "prober_pool", prober_pool)
        if prober_preference is not None:
            pulumi.set(__self__, "prober_preference", prober_preference)
        if product is not None:
            pulumi.set(__self__, "product", product)
        if virtual_server_discovery is not None:
            pulumi.set(__self__, "virtual_server_discovery", virtual_server_discovery)
        if virtual_servers is not None:
            pulumi.set(__self__, "virtual_servers", virtual_servers)

    @_builtins.property
    @pulumi.getter
    def datacenter(self) -> pulumi.Input[_builtins.str]:
        """
        The datacenter where this server resides. Must be a valid datacenter name or full path (e.g., `/Common/datacenter1`).
        """
        return pulumi.get(self, "datacenter")

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

    @_builtins.property
    @pulumi.getter
    def name(self) -> pulumi.Input[_builtins.str]:
        """
        Name of the GTM server. Must be unique within the partition.
        """
        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 addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['GtmServerAddressArgs']]]]:
        """
        List of IP addresses for the server. Each address block supports:
        """
        return pulumi.get(self, "addresses")

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

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

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

    @_builtins.property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enable or disable the GTM server
        """
        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="exposeRouteDomains")
    def expose_route_domains(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Allow GTM server to expose route domains. Default is `false`.
        """
        return pulumi.get(self, "expose_route_domains")

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

    @_builtins.property
    @pulumi.getter(name="iqAllowPath")
    def iq_allow_path(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enable iQuery path probing. Default is `true`.
        """
        return pulumi.get(self, "iq_allow_path")

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

    @_builtins.property
    @pulumi.getter(name="iqAllowServiceCheck")
    def iq_allow_service_check(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enable iQuery service checking. Default is `true`.
        """
        return pulumi.get(self, "iq_allow_service_check")

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

    @_builtins.property
    @pulumi.getter(name="iqAllowSnmp")
    def iq_allow_snmp(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enable iQuery SNMP. Default is `true`.
        """
        return pulumi.get(self, "iq_allow_snmp")

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

    @_builtins.property
    @pulumi.getter(name="limitCpuUsage")
    def limit_cpu_usage(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Maximum CPU usage allowed (percent). 0 means no limit. Default is `0`.
        """
        return pulumi.get(self, "limit_cpu_usage")

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

    @_builtins.property
    @pulumi.getter(name="limitCpuUsageStatus")
    def limit_cpu_usage_status(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        CPU usage limit status.
        """
        return pulumi.get(self, "limit_cpu_usage_status")

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

    @_builtins.property
    @pulumi.getter(name="limitMaxBps")
    def limit_max_bps(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Maximum bits per second. 0 means no limit. Default is `0`.
        """
        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]]:
        """
        Maximum bps limit status.
        """
        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]]:
        """
        Maximum concurrent connections. 0 means no limit. Default is `0`.
        """
        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]]:
        """
        Maximum connections limit status.
        """
        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]]:
        """
        Maximum packets per second. 0 means no limit. Default is `0`.
        """
        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]]:
        """
        Maximum pps limit status.
        """
        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="limitMemAvail")
    def limit_mem_avail(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Available memory limit (MB). 0 means no limit. Default is `0`.
        """
        return pulumi.get(self, "limit_mem_avail")

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

    @_builtins.property
    @pulumi.getter(name="limitMemAvailStatus")
    def limit_mem_avail_status(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Available memory limit status.
        """
        return pulumi.get(self, "limit_mem_avail_status")

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

    @_builtins.property
    @pulumi.getter(name="linkDiscovery")
    def link_discovery(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Link discovery mode. Valid values:
        """
        return pulumi.get(self, "link_discovery")

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

    @_builtins.property
    @pulumi.getter
    def monitor(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Monitor assigned to check server health (e.g., `/Common/bigip`, `/Common/tcp`).
        """
        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 or tenant the server belongs to. Default is `Common`.
        """
        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="proberFallback")
    def prober_fallback(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Fallback prober selection. Valid values:
        """
        return pulumi.get(self, "prober_fallback")

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

    @_builtins.property
    @pulumi.getter(name="proberPool")
    def prober_pool(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Prober pool to use when prober_preference or prober_fallback is set to pool
        """
        return pulumi.get(self, "prober_pool")

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

    @_builtins.property
    @pulumi.getter(name="proberPreference")
    def prober_preference(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Preferred type of prober. Valid values:
        """
        return pulumi.get(self, "prober_preference")

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

    @_builtins.property
    @pulumi.getter
    def product(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Type of server. Valid values are:
        """
        return pulumi.get(self, "product")

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

    @_builtins.property
    @pulumi.getter(name="virtualServerDiscovery")
    def virtual_server_discovery(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Enable or disable virtual server discovery. Default is `true`. When enabled, GTM automatically discovers virtual servers on BIG-IP systems.
        """
        return pulumi.get(self, "virtual_server_discovery")

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

    @_builtins.property
    @pulumi.getter(name="virtualServers")
    def virtual_servers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['GtmServerVirtualServerArgs']]]]:
        """
        List of virtual servers for the GTM server. This is particularly useful for generic-host servers where virtual server discovery is not available. Each virtual_servers block supports:
        """
        return pulumi.get(self, "virtual_servers")

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


@pulumi.input_type
class _GtmServerState:
    def __init__(__self__, *,
                 addresses: Optional[pulumi.Input[Sequence[pulumi.Input['GtmServerAddressArgs']]]] = None,
                 datacenter: Optional[pulumi.Input[_builtins.str]] = None,
                 description: Optional[pulumi.Input[_builtins.str]] = None,
                 enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 expose_route_domains: Optional[pulumi.Input[_builtins.bool]] = None,
                 iq_allow_path: Optional[pulumi.Input[_builtins.bool]] = None,
                 iq_allow_service_check: Optional[pulumi.Input[_builtins.bool]] = None,
                 iq_allow_snmp: Optional[pulumi.Input[_builtins.bool]] = None,
                 limit_cpu_usage: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_cpu_usage_status: 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,
                 limit_mem_avail: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_mem_avail_status: Optional[pulumi.Input[_builtins.str]] = None,
                 link_discovery: Optional[pulumi.Input[_builtins.str]] = None,
                 monitor: Optional[pulumi.Input[_builtins.str]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 partition: Optional[pulumi.Input[_builtins.str]] = None,
                 prober_fallback: Optional[pulumi.Input[_builtins.str]] = None,
                 prober_pool: Optional[pulumi.Input[_builtins.str]] = None,
                 prober_preference: Optional[pulumi.Input[_builtins.str]] = None,
                 product: Optional[pulumi.Input[_builtins.str]] = None,
                 virtual_server_discovery: Optional[pulumi.Input[_builtins.str]] = None,
                 virtual_servers: Optional[pulumi.Input[Sequence[pulumi.Input['GtmServerVirtualServerArgs']]]] = None):
        """
        Input properties used for looking up and filtering GtmServer resources.

        :param pulumi.Input[Sequence[pulumi.Input['GtmServerAddressArgs']]] addresses: List of IP addresses for the server. Each address block supports:
        :param pulumi.Input[_builtins.str] datacenter: The datacenter where this server resides. Must be a valid datacenter name or full path (e.g., `/Common/datacenter1`).
        :param pulumi.Input[_builtins.str] description: Description of the GTM server
        :param pulumi.Input[_builtins.bool] enabled: Enable or disable the GTM server
        :param pulumi.Input[_builtins.bool] expose_route_domains: Allow GTM server to expose route domains. Default is `false`.
        :param pulumi.Input[_builtins.bool] iq_allow_path: Enable iQuery path probing. Default is `true`.
        :param pulumi.Input[_builtins.bool] iq_allow_service_check: Enable iQuery service checking. Default is `true`.
        :param pulumi.Input[_builtins.bool] iq_allow_snmp: Enable iQuery SNMP. Default is `true`.
        :param pulumi.Input[_builtins.int] limit_cpu_usage: Maximum CPU usage allowed (percent). 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_cpu_usage_status: CPU usage limit status.
        :param pulumi.Input[_builtins.int] limit_max_bps: Maximum bits per second. 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_max_bps_status: Maximum bps limit status.
        :param pulumi.Input[_builtins.int] limit_max_connections: Maximum concurrent connections. 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_max_connections_status: Maximum connections limit status.
        :param pulumi.Input[_builtins.int] limit_max_pps: Maximum packets per second. 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_max_pps_status: Maximum pps limit status.
        :param pulumi.Input[_builtins.int] limit_mem_avail: Available memory limit (MB). 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_mem_avail_status: Available memory limit status.
        :param pulumi.Input[_builtins.str] link_discovery: Link discovery mode. Valid values:
        :param pulumi.Input[_builtins.str] monitor: Monitor assigned to check server health (e.g., `/Common/bigip`, `/Common/tcp`).
        :param pulumi.Input[_builtins.str] name: Name of the GTM server. Must be unique within the partition.
        :param pulumi.Input[_builtins.str] partition: Partition or tenant the server belongs to. Default is `Common`.
        :param pulumi.Input[_builtins.str] prober_fallback: Fallback prober selection. Valid values:
        :param pulumi.Input[_builtins.str] prober_pool: Prober pool to use when prober_preference or prober_fallback is set to pool
        :param pulumi.Input[_builtins.str] prober_preference: Preferred type of prober. Valid values:
        :param pulumi.Input[_builtins.str] product: Type of server. Valid values are:
        :param pulumi.Input[_builtins.str] virtual_server_discovery: Enable or disable virtual server discovery. Default is `true`. When enabled, GTM automatically discovers virtual servers on BIG-IP systems.
        :param pulumi.Input[Sequence[pulumi.Input['GtmServerVirtualServerArgs']]] virtual_servers: List of virtual servers for the GTM server. This is particularly useful for generic-host servers where virtual server discovery is not available. Each virtual_servers block supports:
        """
        if addresses is not None:
            pulumi.set(__self__, "addresses", addresses)
        if datacenter is not None:
            pulumi.set(__self__, "datacenter", datacenter)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if expose_route_domains is not None:
            pulumi.set(__self__, "expose_route_domains", expose_route_domains)
        if iq_allow_path is not None:
            pulumi.set(__self__, "iq_allow_path", iq_allow_path)
        if iq_allow_service_check is not None:
            pulumi.set(__self__, "iq_allow_service_check", iq_allow_service_check)
        if iq_allow_snmp is not None:
            pulumi.set(__self__, "iq_allow_snmp", iq_allow_snmp)
        if limit_cpu_usage is not None:
            pulumi.set(__self__, "limit_cpu_usage", limit_cpu_usage)
        if limit_cpu_usage_status is not None:
            pulumi.set(__self__, "limit_cpu_usage_status", limit_cpu_usage_status)
        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 limit_mem_avail is not None:
            pulumi.set(__self__, "limit_mem_avail", limit_mem_avail)
        if limit_mem_avail_status is not None:
            pulumi.set(__self__, "limit_mem_avail_status", limit_mem_avail_status)
        if link_discovery is not None:
            pulumi.set(__self__, "link_discovery", link_discovery)
        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 prober_fallback is not None:
            pulumi.set(__self__, "prober_fallback", prober_fallback)
        if prober_pool is not None:
            pulumi.set(__self__, "prober_pool", prober_pool)
        if prober_preference is not None:
            pulumi.set(__self__, "prober_preference", prober_preference)
        if product is not None:
            pulumi.set(__self__, "product", product)
        if virtual_server_discovery is not None:
            pulumi.set(__self__, "virtual_server_discovery", virtual_server_discovery)
        if virtual_servers is not None:
            pulumi.set(__self__, "virtual_servers", virtual_servers)

    @_builtins.property
    @pulumi.getter
    def addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['GtmServerAddressArgs']]]]:
        """
        List of IP addresses for the server. Each address block supports:
        """
        return pulumi.get(self, "addresses")

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

    @_builtins.property
    @pulumi.getter
    def datacenter(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The datacenter where this server resides. Must be a valid datacenter name or full path (e.g., `/Common/datacenter1`).
        """
        return pulumi.get(self, "datacenter")

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

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

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

    @_builtins.property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enable or disable the GTM server
        """
        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="exposeRouteDomains")
    def expose_route_domains(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Allow GTM server to expose route domains. Default is `false`.
        """
        return pulumi.get(self, "expose_route_domains")

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

    @_builtins.property
    @pulumi.getter(name="iqAllowPath")
    def iq_allow_path(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enable iQuery path probing. Default is `true`.
        """
        return pulumi.get(self, "iq_allow_path")

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

    @_builtins.property
    @pulumi.getter(name="iqAllowServiceCheck")
    def iq_allow_service_check(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enable iQuery service checking. Default is `true`.
        """
        return pulumi.get(self, "iq_allow_service_check")

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

    @_builtins.property
    @pulumi.getter(name="iqAllowSnmp")
    def iq_allow_snmp(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enable iQuery SNMP. Default is `true`.
        """
        return pulumi.get(self, "iq_allow_snmp")

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

    @_builtins.property
    @pulumi.getter(name="limitCpuUsage")
    def limit_cpu_usage(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Maximum CPU usage allowed (percent). 0 means no limit. Default is `0`.
        """
        return pulumi.get(self, "limit_cpu_usage")

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

    @_builtins.property
    @pulumi.getter(name="limitCpuUsageStatus")
    def limit_cpu_usage_status(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        CPU usage limit status.
        """
        return pulumi.get(self, "limit_cpu_usage_status")

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

    @_builtins.property
    @pulumi.getter(name="limitMaxBps")
    def limit_max_bps(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Maximum bits per second. 0 means no limit. Default is `0`.
        """
        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]]:
        """
        Maximum bps limit status.
        """
        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]]:
        """
        Maximum concurrent connections. 0 means no limit. Default is `0`.
        """
        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]]:
        """
        Maximum connections limit status.
        """
        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]]:
        """
        Maximum packets per second. 0 means no limit. Default is `0`.
        """
        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]]:
        """
        Maximum pps limit status.
        """
        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="limitMemAvail")
    def limit_mem_avail(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Available memory limit (MB). 0 means no limit. Default is `0`.
        """
        return pulumi.get(self, "limit_mem_avail")

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

    @_builtins.property
    @pulumi.getter(name="limitMemAvailStatus")
    def limit_mem_avail_status(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Available memory limit status.
        """
        return pulumi.get(self, "limit_mem_avail_status")

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

    @_builtins.property
    @pulumi.getter(name="linkDiscovery")
    def link_discovery(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Link discovery mode. Valid values:
        """
        return pulumi.get(self, "link_discovery")

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

    @_builtins.property
    @pulumi.getter
    def monitor(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Monitor assigned to check server health (e.g., `/Common/bigip`, `/Common/tcp`).
        """
        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 server. Must be unique within the partition.
        """
        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 or tenant the server belongs to. Default is `Common`.
        """
        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="proberFallback")
    def prober_fallback(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Fallback prober selection. Valid values:
        """
        return pulumi.get(self, "prober_fallback")

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

    @_builtins.property
    @pulumi.getter(name="proberPool")
    def prober_pool(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Prober pool to use when prober_preference or prober_fallback is set to pool
        """
        return pulumi.get(self, "prober_pool")

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

    @_builtins.property
    @pulumi.getter(name="proberPreference")
    def prober_preference(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Preferred type of prober. Valid values:
        """
        return pulumi.get(self, "prober_preference")

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

    @_builtins.property
    @pulumi.getter
    def product(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Type of server. Valid values are:
        """
        return pulumi.get(self, "product")

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

    @_builtins.property
    @pulumi.getter(name="virtualServerDiscovery")
    def virtual_server_discovery(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Enable or disable virtual server discovery. Default is `true`. When enabled, GTM automatically discovers virtual servers on BIG-IP systems.
        """
        return pulumi.get(self, "virtual_server_discovery")

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

    @_builtins.property
    @pulumi.getter(name="virtualServers")
    def virtual_servers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['GtmServerVirtualServerArgs']]]]:
        """
        List of virtual servers for the GTM server. This is particularly useful for generic-host servers where virtual server discovery is not available. Each virtual_servers block supports:
        """
        return pulumi.get(self, "virtual_servers")

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


@pulumi.type_token("f5bigip:index/gtmServer:GtmServer")
class GtmServer(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 addresses: Optional[pulumi.Input[Sequence[pulumi.Input[Union['GtmServerAddressArgs', 'GtmServerAddressArgsDict']]]]] = None,
                 datacenter: Optional[pulumi.Input[_builtins.str]] = None,
                 description: Optional[pulumi.Input[_builtins.str]] = None,
                 enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 expose_route_domains: Optional[pulumi.Input[_builtins.bool]] = None,
                 iq_allow_path: Optional[pulumi.Input[_builtins.bool]] = None,
                 iq_allow_service_check: Optional[pulumi.Input[_builtins.bool]] = None,
                 iq_allow_snmp: Optional[pulumi.Input[_builtins.bool]] = None,
                 limit_cpu_usage: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_cpu_usage_status: 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,
                 limit_mem_avail: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_mem_avail_status: Optional[pulumi.Input[_builtins.str]] = None,
                 link_discovery: Optional[pulumi.Input[_builtins.str]] = None,
                 monitor: Optional[pulumi.Input[_builtins.str]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 partition: Optional[pulumi.Input[_builtins.str]] = None,
                 prober_fallback: Optional[pulumi.Input[_builtins.str]] = None,
                 prober_pool: Optional[pulumi.Input[_builtins.str]] = None,
                 prober_preference: Optional[pulumi.Input[_builtins.str]] = None,
                 product: Optional[pulumi.Input[_builtins.str]] = None,
                 virtual_server_discovery: Optional[pulumi.Input[_builtins.str]] = None,
                 virtual_servers: Optional[pulumi.Input[Sequence[pulumi.Input[Union['GtmServerVirtualServerArgs', 'GtmServerVirtualServerArgsDict']]]]] = None,
                 __props__=None):
        """
        ## # GtmServer

        Manages F5 BIG-IP GTM (Global Traffic Manager) Server resources.

        A GTM server represents a BIG-IP system, a host, or a server that hosts applications. Servers are identified by their addresses and are organized within datacenters. GTM servers enable GTM to perform load balancing and provide health monitoring for distributed applications.

        ## Example Usage

        ### Basic GTM Server (BIG-IP)

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        dc1 = f5bigip.GtmDatacenter("dc1", name="datacenter1")
        server1 = f5bigip.GtmServer("server1",
            name="bigip_server1",
            datacenter=dc1.name,
            product="bigip",
            addresses=[{
                "name": "10.1.1.1",
            }],
            monitor="/Common/bigip",
            virtual_server_discovery="true",
            link_discovery="disabled")
        ```

        ### GTM Server with Multiple Addresses

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        dc1 = f5bigip.GtmDatacenter("dc1", name="datacenter1")
        multi_address_server = f5bigip.GtmServer("multi_address_server",
            name="multi_server",
            datacenter=dc1.name,
            product="bigip",
            addresses=[
                {
                    "name": "10.1.1.1",
                    "device_name": "/Common/bigip1.example.com",
                    "translation": "none",
                },
                {
                    "name": "10.1.1.2",
                    "device_name": "/Common/bigip2.example.com",
                    "translation": "none",
                },
            ],
            monitor="/Common/bigip",
            virtual_server_discovery="true")
        ```

        ### GTM Server with Address Translation

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        dc1 = f5bigip.GtmDatacenter("dc1", name="datacenter1")
        nat_server = f5bigip.GtmServer("nat_server",
            name="nat_server",
            datacenter=dc1.name,
            product="bigip",
            addresses=[{
                "name": "10.10.10.10",
                "device_name": "/Common/server.example.com",
                "translation": "192.168.1.10",
            }],
            monitor="/Common/bigip",
            virtual_server_discovery="true")
        ```

        ### Generic Host Server

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        dc1 = f5bigip.GtmDatacenter("dc1", name="datacenter1")
        generic_host = f5bigip.GtmServer("generic_host",
            name="generic_server",
            datacenter=dc1.name,
            product="generic-host",
            addresses=[{
                "name": "10.20.20.20",
            }],
            monitor="/Common/tcp",
            virtual_server_discovery="false",
            link_discovery="disabled")
        ```

        ### Generic Host Server with Virtual Servers

        For generic-host servers that don't support virtual server discovery, you can manually define virtual servers:

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        dc1 = f5bigip.GtmDatacenter("dc1", name="datacenter1")
        generic_with_vs = f5bigip.GtmServer("generic_with_vs",
            name="generic_app_server",
            datacenter=dc1.name,
            product="generic-host",
            addresses=[{
                "name": "192.168.10.100",
            }],
            virtual_server_discovery="disabled",
            link_discovery="disabled",
            virtual_servers=[
                {
                    "name": "vs_http",
                    "destination": "192.168.10.100:80",
                    "enabled": True,
                },
                {
                    "name": "vs_https",
                    "destination": "192.168.10.100:443",
                    "enabled": True,
                },
                {
                    "name": "vs_api",
                    "destination": "192.168.10.100:8080",
                    "enabled": True,
                    "translation_address": "none",
                    "translation_port": 0,
                },
            ],
            enabled=True)
        ```

        ### GTM Server with Prober Settings

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        dc1 = f5bigip.GtmDatacenter("dc1", name="datacenter1")
        prober_server = f5bigip.GtmServer("prober_server",
            name="prober_configured_server",
            datacenter=dc1.name,
            product="bigip",
            addresses=[{
                "name": "10.30.30.30",
            }],
            monitor="/Common/bigip",
            virtual_server_discovery="true",
            prober_preference="inside-datacenter",
            prober_fallback="any-available",
            iq_allow_path=True,
            iq_allow_service_check=True,
            iq_allow_snmp=True)
        ```

        ### GTM Server with Resource Limits

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        dc1 = f5bigip.GtmDatacenter("dc1", name="datacenter1")
        limited_server = f5bigip.GtmServer("limited_server",
            name="resource_limited_server",
            datacenter=dc1.name,
            product="bigip",
            addresses=[{
                "name": "10.40.40.40",
            }],
            monitor="/Common/bigip",
            virtual_server_discovery="true",
            limit_max_connections=10000,
            limit_max_bps=1000000,
            limit_max_pps=50000,
            limit_cpu_usage=80,
            limit_mem_avail=1024)
        ```

        ## Notes

        * When creating a GTM server of type `bigip`, ensure that the BIG-IP device is accessible and properly configured for GTM communication.

        * Virtual server discovery requires proper iQuery communication between GTM systems.

        * Address translation is useful when servers are behind NAT.

        * Multiple addresses can be specified for servers with multiple network interfaces or for redundancy.

        * Resource limits help prevent a single server from consuming all available capacity in load balancing decisions.

        * Prober settings control how GTM monitors server health from different network locations.

        ## Import

        GTM servers can be imported using the server name or full path:

        ```sh
        $ pulumi import f5bigip:index/gtmServer:GtmServer example /Common/server1
        ```

        or

        ```sh
        $ pulumi import f5bigip:index/gtmServer:GtmServer example server1
        ```


        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[Sequence[pulumi.Input[Union['GtmServerAddressArgs', 'GtmServerAddressArgsDict']]]] addresses: List of IP addresses for the server. Each address block supports:
        :param pulumi.Input[_builtins.str] datacenter: The datacenter where this server resides. Must be a valid datacenter name or full path (e.g., `/Common/datacenter1`).
        :param pulumi.Input[_builtins.str] description: Description of the GTM server
        :param pulumi.Input[_builtins.bool] enabled: Enable or disable the GTM server
        :param pulumi.Input[_builtins.bool] expose_route_domains: Allow GTM server to expose route domains. Default is `false`.
        :param pulumi.Input[_builtins.bool] iq_allow_path: Enable iQuery path probing. Default is `true`.
        :param pulumi.Input[_builtins.bool] iq_allow_service_check: Enable iQuery service checking. Default is `true`.
        :param pulumi.Input[_builtins.bool] iq_allow_snmp: Enable iQuery SNMP. Default is `true`.
        :param pulumi.Input[_builtins.int] limit_cpu_usage: Maximum CPU usage allowed (percent). 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_cpu_usage_status: CPU usage limit status.
        :param pulumi.Input[_builtins.int] limit_max_bps: Maximum bits per second. 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_max_bps_status: Maximum bps limit status.
        :param pulumi.Input[_builtins.int] limit_max_connections: Maximum concurrent connections. 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_max_connections_status: Maximum connections limit status.
        :param pulumi.Input[_builtins.int] limit_max_pps: Maximum packets per second. 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_max_pps_status: Maximum pps limit status.
        :param pulumi.Input[_builtins.int] limit_mem_avail: Available memory limit (MB). 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_mem_avail_status: Available memory limit status.
        :param pulumi.Input[_builtins.str] link_discovery: Link discovery mode. Valid values:
        :param pulumi.Input[_builtins.str] monitor: Monitor assigned to check server health (e.g., `/Common/bigip`, `/Common/tcp`).
        :param pulumi.Input[_builtins.str] name: Name of the GTM server. Must be unique within the partition.
        :param pulumi.Input[_builtins.str] partition: Partition or tenant the server belongs to. Default is `Common`.
        :param pulumi.Input[_builtins.str] prober_fallback: Fallback prober selection. Valid values:
        :param pulumi.Input[_builtins.str] prober_pool: Prober pool to use when prober_preference or prober_fallback is set to pool
        :param pulumi.Input[_builtins.str] prober_preference: Preferred type of prober. Valid values:
        :param pulumi.Input[_builtins.str] product: Type of server. Valid values are:
        :param pulumi.Input[_builtins.str] virtual_server_discovery: Enable or disable virtual server discovery. Default is `true`. When enabled, GTM automatically discovers virtual servers on BIG-IP systems.
        :param pulumi.Input[Sequence[pulumi.Input[Union['GtmServerVirtualServerArgs', 'GtmServerVirtualServerArgsDict']]]] virtual_servers: List of virtual servers for the GTM server. This is particularly useful for generic-host servers where virtual server discovery is not available. Each virtual_servers block supports:
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: GtmServerArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        ## # GtmServer

        Manages F5 BIG-IP GTM (Global Traffic Manager) Server resources.

        A GTM server represents a BIG-IP system, a host, or a server that hosts applications. Servers are identified by their addresses and are organized within datacenters. GTM servers enable GTM to perform load balancing and provide health monitoring for distributed applications.

        ## Example Usage

        ### Basic GTM Server (BIG-IP)

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        dc1 = f5bigip.GtmDatacenter("dc1", name="datacenter1")
        server1 = f5bigip.GtmServer("server1",
            name="bigip_server1",
            datacenter=dc1.name,
            product="bigip",
            addresses=[{
                "name": "10.1.1.1",
            }],
            monitor="/Common/bigip",
            virtual_server_discovery="true",
            link_discovery="disabled")
        ```

        ### GTM Server with Multiple Addresses

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        dc1 = f5bigip.GtmDatacenter("dc1", name="datacenter1")
        multi_address_server = f5bigip.GtmServer("multi_address_server",
            name="multi_server",
            datacenter=dc1.name,
            product="bigip",
            addresses=[
                {
                    "name": "10.1.1.1",
                    "device_name": "/Common/bigip1.example.com",
                    "translation": "none",
                },
                {
                    "name": "10.1.1.2",
                    "device_name": "/Common/bigip2.example.com",
                    "translation": "none",
                },
            ],
            monitor="/Common/bigip",
            virtual_server_discovery="true")
        ```

        ### GTM Server with Address Translation

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        dc1 = f5bigip.GtmDatacenter("dc1", name="datacenter1")
        nat_server = f5bigip.GtmServer("nat_server",
            name="nat_server",
            datacenter=dc1.name,
            product="bigip",
            addresses=[{
                "name": "10.10.10.10",
                "device_name": "/Common/server.example.com",
                "translation": "192.168.1.10",
            }],
            monitor="/Common/bigip",
            virtual_server_discovery="true")
        ```

        ### Generic Host Server

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        dc1 = f5bigip.GtmDatacenter("dc1", name="datacenter1")
        generic_host = f5bigip.GtmServer("generic_host",
            name="generic_server",
            datacenter=dc1.name,
            product="generic-host",
            addresses=[{
                "name": "10.20.20.20",
            }],
            monitor="/Common/tcp",
            virtual_server_discovery="false",
            link_discovery="disabled")
        ```

        ### Generic Host Server with Virtual Servers

        For generic-host servers that don't support virtual server discovery, you can manually define virtual servers:

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        dc1 = f5bigip.GtmDatacenter("dc1", name="datacenter1")
        generic_with_vs = f5bigip.GtmServer("generic_with_vs",
            name="generic_app_server",
            datacenter=dc1.name,
            product="generic-host",
            addresses=[{
                "name": "192.168.10.100",
            }],
            virtual_server_discovery="disabled",
            link_discovery="disabled",
            virtual_servers=[
                {
                    "name": "vs_http",
                    "destination": "192.168.10.100:80",
                    "enabled": True,
                },
                {
                    "name": "vs_https",
                    "destination": "192.168.10.100:443",
                    "enabled": True,
                },
                {
                    "name": "vs_api",
                    "destination": "192.168.10.100:8080",
                    "enabled": True,
                    "translation_address": "none",
                    "translation_port": 0,
                },
            ],
            enabled=True)
        ```

        ### GTM Server with Prober Settings

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        dc1 = f5bigip.GtmDatacenter("dc1", name="datacenter1")
        prober_server = f5bigip.GtmServer("prober_server",
            name="prober_configured_server",
            datacenter=dc1.name,
            product="bigip",
            addresses=[{
                "name": "10.30.30.30",
            }],
            monitor="/Common/bigip",
            virtual_server_discovery="true",
            prober_preference="inside-datacenter",
            prober_fallback="any-available",
            iq_allow_path=True,
            iq_allow_service_check=True,
            iq_allow_snmp=True)
        ```

        ### GTM Server with Resource Limits

        ```python
        import pulumi
        import pulumi_f5bigip as f5bigip

        dc1 = f5bigip.GtmDatacenter("dc1", name="datacenter1")
        limited_server = f5bigip.GtmServer("limited_server",
            name="resource_limited_server",
            datacenter=dc1.name,
            product="bigip",
            addresses=[{
                "name": "10.40.40.40",
            }],
            monitor="/Common/bigip",
            virtual_server_discovery="true",
            limit_max_connections=10000,
            limit_max_bps=1000000,
            limit_max_pps=50000,
            limit_cpu_usage=80,
            limit_mem_avail=1024)
        ```

        ## Notes

        * When creating a GTM server of type `bigip`, ensure that the BIG-IP device is accessible and properly configured for GTM communication.

        * Virtual server discovery requires proper iQuery communication between GTM systems.

        * Address translation is useful when servers are behind NAT.

        * Multiple addresses can be specified for servers with multiple network interfaces or for redundancy.

        * Resource limits help prevent a single server from consuming all available capacity in load balancing decisions.

        * Prober settings control how GTM monitors server health from different network locations.

        ## Import

        GTM servers can be imported using the server name or full path:

        ```sh
        $ pulumi import f5bigip:index/gtmServer:GtmServer example /Common/server1
        ```

        or

        ```sh
        $ pulumi import f5bigip:index/gtmServer:GtmServer example server1
        ```


        :param str resource_name: The name of the resource.
        :param GtmServerArgs 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(GtmServerArgs, 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,
                 addresses: Optional[pulumi.Input[Sequence[pulumi.Input[Union['GtmServerAddressArgs', 'GtmServerAddressArgsDict']]]]] = None,
                 datacenter: Optional[pulumi.Input[_builtins.str]] = None,
                 description: Optional[pulumi.Input[_builtins.str]] = None,
                 enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 expose_route_domains: Optional[pulumi.Input[_builtins.bool]] = None,
                 iq_allow_path: Optional[pulumi.Input[_builtins.bool]] = None,
                 iq_allow_service_check: Optional[pulumi.Input[_builtins.bool]] = None,
                 iq_allow_snmp: Optional[pulumi.Input[_builtins.bool]] = None,
                 limit_cpu_usage: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_cpu_usage_status: 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,
                 limit_mem_avail: Optional[pulumi.Input[_builtins.int]] = None,
                 limit_mem_avail_status: Optional[pulumi.Input[_builtins.str]] = None,
                 link_discovery: Optional[pulumi.Input[_builtins.str]] = None,
                 monitor: Optional[pulumi.Input[_builtins.str]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 partition: Optional[pulumi.Input[_builtins.str]] = None,
                 prober_fallback: Optional[pulumi.Input[_builtins.str]] = None,
                 prober_pool: Optional[pulumi.Input[_builtins.str]] = None,
                 prober_preference: Optional[pulumi.Input[_builtins.str]] = None,
                 product: Optional[pulumi.Input[_builtins.str]] = None,
                 virtual_server_discovery: Optional[pulumi.Input[_builtins.str]] = None,
                 virtual_servers: Optional[pulumi.Input[Sequence[pulumi.Input[Union['GtmServerVirtualServerArgs', 'GtmServerVirtualServerArgsDict']]]]] = 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__ = GtmServerArgs.__new__(GtmServerArgs)

            __props__.__dict__["addresses"] = addresses
            if datacenter is None and not opts.urn:
                raise TypeError("Missing required property 'datacenter'")
            __props__.__dict__["datacenter"] = datacenter
            __props__.__dict__["description"] = description
            __props__.__dict__["enabled"] = enabled
            __props__.__dict__["expose_route_domains"] = expose_route_domains
            __props__.__dict__["iq_allow_path"] = iq_allow_path
            __props__.__dict__["iq_allow_service_check"] = iq_allow_service_check
            __props__.__dict__["iq_allow_snmp"] = iq_allow_snmp
            __props__.__dict__["limit_cpu_usage"] = limit_cpu_usage
            __props__.__dict__["limit_cpu_usage_status"] = limit_cpu_usage_status
            __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__["limit_mem_avail"] = limit_mem_avail
            __props__.__dict__["limit_mem_avail_status"] = limit_mem_avail_status
            __props__.__dict__["link_discovery"] = link_discovery
            __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__["prober_fallback"] = prober_fallback
            __props__.__dict__["prober_pool"] = prober_pool
            __props__.__dict__["prober_preference"] = prober_preference
            __props__.__dict__["product"] = product
            __props__.__dict__["virtual_server_discovery"] = virtual_server_discovery
            __props__.__dict__["virtual_servers"] = virtual_servers
        super(GtmServer, __self__).__init__(
            'f5bigip:index/gtmServer:GtmServer',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            addresses: Optional[pulumi.Input[Sequence[pulumi.Input[Union['GtmServerAddressArgs', 'GtmServerAddressArgsDict']]]]] = None,
            datacenter: Optional[pulumi.Input[_builtins.str]] = None,
            description: Optional[pulumi.Input[_builtins.str]] = None,
            enabled: Optional[pulumi.Input[_builtins.bool]] = None,
            expose_route_domains: Optional[pulumi.Input[_builtins.bool]] = None,
            iq_allow_path: Optional[pulumi.Input[_builtins.bool]] = None,
            iq_allow_service_check: Optional[pulumi.Input[_builtins.bool]] = None,
            iq_allow_snmp: Optional[pulumi.Input[_builtins.bool]] = None,
            limit_cpu_usage: Optional[pulumi.Input[_builtins.int]] = None,
            limit_cpu_usage_status: 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,
            limit_mem_avail: Optional[pulumi.Input[_builtins.int]] = None,
            limit_mem_avail_status: Optional[pulumi.Input[_builtins.str]] = None,
            link_discovery: Optional[pulumi.Input[_builtins.str]] = None,
            monitor: Optional[pulumi.Input[_builtins.str]] = None,
            name: Optional[pulumi.Input[_builtins.str]] = None,
            partition: Optional[pulumi.Input[_builtins.str]] = None,
            prober_fallback: Optional[pulumi.Input[_builtins.str]] = None,
            prober_pool: Optional[pulumi.Input[_builtins.str]] = None,
            prober_preference: Optional[pulumi.Input[_builtins.str]] = None,
            product: Optional[pulumi.Input[_builtins.str]] = None,
            virtual_server_discovery: Optional[pulumi.Input[_builtins.str]] = None,
            virtual_servers: Optional[pulumi.Input[Sequence[pulumi.Input[Union['GtmServerVirtualServerArgs', 'GtmServerVirtualServerArgsDict']]]]] = None) -> 'GtmServer':
        """
        Get an existing GtmServer 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[Sequence[pulumi.Input[Union['GtmServerAddressArgs', 'GtmServerAddressArgsDict']]]] addresses: List of IP addresses for the server. Each address block supports:
        :param pulumi.Input[_builtins.str] datacenter: The datacenter where this server resides. Must be a valid datacenter name or full path (e.g., `/Common/datacenter1`).
        :param pulumi.Input[_builtins.str] description: Description of the GTM server
        :param pulumi.Input[_builtins.bool] enabled: Enable or disable the GTM server
        :param pulumi.Input[_builtins.bool] expose_route_domains: Allow GTM server to expose route domains. Default is `false`.
        :param pulumi.Input[_builtins.bool] iq_allow_path: Enable iQuery path probing. Default is `true`.
        :param pulumi.Input[_builtins.bool] iq_allow_service_check: Enable iQuery service checking. Default is `true`.
        :param pulumi.Input[_builtins.bool] iq_allow_snmp: Enable iQuery SNMP. Default is `true`.
        :param pulumi.Input[_builtins.int] limit_cpu_usage: Maximum CPU usage allowed (percent). 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_cpu_usage_status: CPU usage limit status.
        :param pulumi.Input[_builtins.int] limit_max_bps: Maximum bits per second. 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_max_bps_status: Maximum bps limit status.
        :param pulumi.Input[_builtins.int] limit_max_connections: Maximum concurrent connections. 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_max_connections_status: Maximum connections limit status.
        :param pulumi.Input[_builtins.int] limit_max_pps: Maximum packets per second. 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_max_pps_status: Maximum pps limit status.
        :param pulumi.Input[_builtins.int] limit_mem_avail: Available memory limit (MB). 0 means no limit. Default is `0`.
        :param pulumi.Input[_builtins.str] limit_mem_avail_status: Available memory limit status.
        :param pulumi.Input[_builtins.str] link_discovery: Link discovery mode. Valid values:
        :param pulumi.Input[_builtins.str] monitor: Monitor assigned to check server health (e.g., `/Common/bigip`, `/Common/tcp`).
        :param pulumi.Input[_builtins.str] name: Name of the GTM server. Must be unique within the partition.
        :param pulumi.Input[_builtins.str] partition: Partition or tenant the server belongs to. Default is `Common`.
        :param pulumi.Input[_builtins.str] prober_fallback: Fallback prober selection. Valid values:
        :param pulumi.Input[_builtins.str] prober_pool: Prober pool to use when prober_preference or prober_fallback is set to pool
        :param pulumi.Input[_builtins.str] prober_preference: Preferred type of prober. Valid values:
        :param pulumi.Input[_builtins.str] product: Type of server. Valid values are:
        :param pulumi.Input[_builtins.str] virtual_server_discovery: Enable or disable virtual server discovery. Default is `true`. When enabled, GTM automatically discovers virtual servers on BIG-IP systems.
        :param pulumi.Input[Sequence[pulumi.Input[Union['GtmServerVirtualServerArgs', 'GtmServerVirtualServerArgsDict']]]] virtual_servers: List of virtual servers for the GTM server. This is particularly useful for generic-host servers where virtual server discovery is not available. Each virtual_servers block supports:
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _GtmServerState.__new__(_GtmServerState)

        __props__.__dict__["addresses"] = addresses
        __props__.__dict__["datacenter"] = datacenter
        __props__.__dict__["description"] = description
        __props__.__dict__["enabled"] = enabled
        __props__.__dict__["expose_route_domains"] = expose_route_domains
        __props__.__dict__["iq_allow_path"] = iq_allow_path
        __props__.__dict__["iq_allow_service_check"] = iq_allow_service_check
        __props__.__dict__["iq_allow_snmp"] = iq_allow_snmp
        __props__.__dict__["limit_cpu_usage"] = limit_cpu_usage
        __props__.__dict__["limit_cpu_usage_status"] = limit_cpu_usage_status
        __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__["limit_mem_avail"] = limit_mem_avail
        __props__.__dict__["limit_mem_avail_status"] = limit_mem_avail_status
        __props__.__dict__["link_discovery"] = link_discovery
        __props__.__dict__["monitor"] = monitor
        __props__.__dict__["name"] = name
        __props__.__dict__["partition"] = partition
        __props__.__dict__["prober_fallback"] = prober_fallback
        __props__.__dict__["prober_pool"] = prober_pool
        __props__.__dict__["prober_preference"] = prober_preference
        __props__.__dict__["product"] = product
        __props__.__dict__["virtual_server_discovery"] = virtual_server_discovery
        __props__.__dict__["virtual_servers"] = virtual_servers
        return GtmServer(resource_name, opts=opts, __props__=__props__)

    @_builtins.property
    @pulumi.getter
    def addresses(self) -> pulumi.Output[Optional[Sequence['outputs.GtmServerAddress']]]:
        """
        List of IP addresses for the server. Each address block supports:
        """
        return pulumi.get(self, "addresses")

    @_builtins.property
    @pulumi.getter
    def datacenter(self) -> pulumi.Output[_builtins.str]:
        """
        The datacenter where this server resides. Must be a valid datacenter name or full path (e.g., `/Common/datacenter1`).
        """
        return pulumi.get(self, "datacenter")

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

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

    @_builtins.property
    @pulumi.getter(name="exposeRouteDomains")
    def expose_route_domains(self) -> pulumi.Output[Optional[_builtins.bool]]:
        """
        Allow GTM server to expose route domains. Default is `false`.
        """
        return pulumi.get(self, "expose_route_domains")

    @_builtins.property
    @pulumi.getter(name="iqAllowPath")
    def iq_allow_path(self) -> pulumi.Output[Optional[_builtins.bool]]:
        """
        Enable iQuery path probing. Default is `true`.
        """
        return pulumi.get(self, "iq_allow_path")

    @_builtins.property
    @pulumi.getter(name="iqAllowServiceCheck")
    def iq_allow_service_check(self) -> pulumi.Output[Optional[_builtins.bool]]:
        """
        Enable iQuery service checking. Default is `true`.
        """
        return pulumi.get(self, "iq_allow_service_check")

    @_builtins.property
    @pulumi.getter(name="iqAllowSnmp")
    def iq_allow_snmp(self) -> pulumi.Output[Optional[_builtins.bool]]:
        """
        Enable iQuery SNMP. Default is `true`.
        """
        return pulumi.get(self, "iq_allow_snmp")

    @_builtins.property
    @pulumi.getter(name="limitCpuUsage")
    def limit_cpu_usage(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Maximum CPU usage allowed (percent). 0 means no limit. Default is `0`.
        """
        return pulumi.get(self, "limit_cpu_usage")

    @_builtins.property
    @pulumi.getter(name="limitCpuUsageStatus")
    def limit_cpu_usage_status(self) -> pulumi.Output[_builtins.str]:
        """
        CPU usage limit status.
        """
        return pulumi.get(self, "limit_cpu_usage_status")

    @_builtins.property
    @pulumi.getter(name="limitMaxBps")
    def limit_max_bps(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Maximum bits per second. 0 means no limit. Default is `0`.
        """
        return pulumi.get(self, "limit_max_bps")

    @_builtins.property
    @pulumi.getter(name="limitMaxBpsStatus")
    def limit_max_bps_status(self) -> pulumi.Output[_builtins.str]:
        """
        Maximum bps limit status.
        """
        return pulumi.get(self, "limit_max_bps_status")

    @_builtins.property
    @pulumi.getter(name="limitMaxConnections")
    def limit_max_connections(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Maximum concurrent connections. 0 means no limit. Default is `0`.
        """
        return pulumi.get(self, "limit_max_connections")

    @_builtins.property
    @pulumi.getter(name="limitMaxConnectionsStatus")
    def limit_max_connections_status(self) -> pulumi.Output[_builtins.str]:
        """
        Maximum connections limit status.
        """
        return pulumi.get(self, "limit_max_connections_status")

    @_builtins.property
    @pulumi.getter(name="limitMaxPps")
    def limit_max_pps(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Maximum packets per second. 0 means no limit. Default is `0`.
        """
        return pulumi.get(self, "limit_max_pps")

    @_builtins.property
    @pulumi.getter(name="limitMaxPpsStatus")
    def limit_max_pps_status(self) -> pulumi.Output[_builtins.str]:
        """
        Maximum pps limit status.
        """
        return pulumi.get(self, "limit_max_pps_status")

    @_builtins.property
    @pulumi.getter(name="limitMemAvail")
    def limit_mem_avail(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Available memory limit (MB). 0 means no limit. Default is `0`.
        """
        return pulumi.get(self, "limit_mem_avail")

    @_builtins.property
    @pulumi.getter(name="limitMemAvailStatus")
    def limit_mem_avail_status(self) -> pulumi.Output[_builtins.str]:
        """
        Available memory limit status.
        """
        return pulumi.get(self, "limit_mem_avail_status")

    @_builtins.property
    @pulumi.getter(name="linkDiscovery")
    def link_discovery(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Link discovery mode. Valid values:
        """
        return pulumi.get(self, "link_discovery")

    @_builtins.property
    @pulumi.getter
    def monitor(self) -> pulumi.Output[_builtins.str]:
        """
        Monitor assigned to check server health (e.g., `/Common/bigip`, `/Common/tcp`).
        """
        return pulumi.get(self, "monitor")

    @_builtins.property
    @pulumi.getter
    def name(self) -> pulumi.Output[_builtins.str]:
        """
        Name of the GTM server. Must be unique within the partition.
        """
        return pulumi.get(self, "name")

    @_builtins.property
    @pulumi.getter
    def partition(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Partition or tenant the server belongs to. Default is `Common`.
        """
        return pulumi.get(self, "partition")

    @_builtins.property
    @pulumi.getter(name="proberFallback")
    def prober_fallback(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Fallback prober selection. Valid values:
        """
        return pulumi.get(self, "prober_fallback")

    @_builtins.property
    @pulumi.getter(name="proberPool")
    def prober_pool(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Prober pool to use when prober_preference or prober_fallback is set to pool
        """
        return pulumi.get(self, "prober_pool")

    @_builtins.property
    @pulumi.getter(name="proberPreference")
    def prober_preference(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Preferred type of prober. Valid values:
        """
        return pulumi.get(self, "prober_preference")

    @_builtins.property
    @pulumi.getter
    def product(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Type of server. Valid values are:
        """
        return pulumi.get(self, "product")

    @_builtins.property
    @pulumi.getter(name="virtualServerDiscovery")
    def virtual_server_discovery(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Enable or disable virtual server discovery. Default is `true`. When enabled, GTM automatically discovers virtual servers on BIG-IP systems.
        """
        return pulumi.get(self, "virtual_server_discovery")

    @_builtins.property
    @pulumi.getter(name="virtualServers")
    def virtual_servers(self) -> pulumi.Output[Optional[Sequence['outputs.GtmServerVirtualServer']]]:
        """
        List of virtual servers for the GTM server. This is particularly useful for generic-host servers where virtual server discovery is not available. Each virtual_servers block supports:
        """
        return pulumi.get(self, "virtual_servers")

