@pulumi/f5bigip
Version:
A Pulumi package for creating and managing F5 BigIP resources.
483 lines • 17.5 kB
TypeScript
import * as pulumi from "@pulumi/pulumi";
/**
* ## # f5bigip.GtmWideip Resource
*
* Provides a BIG-IP GTM (Global Traffic Manager) WideIP resource. This resource allows you to configure and manage GTM WideIP objects on a BIG-IP system.
*
* ## Description
*
* A WideIP is a DNS name that GTM resolves on behalf of an authoritative DNS server. WideIPs are the core objects in GTM that enable intelligent DNS-based load balancing and failover across multiple data centers.
*
* GTM WideIP types correspond to different DNS record types:
* - **a**: IPv4 address records
* - **aaaa**: IPv6 address records
* - **cname**: Canonical name records
* - **mx**: Mail exchange records
* - **naptr**: Naming authority pointer records
* - **srv**: Service locator records
*
* ## Example Usage
*
* ### Basic WideIP
*
* ```typescript
* import * as pulumi from "@pulumi/pulumi";
* import * as f5bigip from "@pulumi/f5bigip";
*
* const example = new f5bigip.GtmWideip("example", {
* name: "testwideip.local",
* type: "a",
* partition: "Common",
* description: "test_wideip_a",
* });
* ```
*
* ### WideIP with Last Resort Pool
*
* ```typescript
* import * as pulumi from "@pulumi/pulumi";
* import * as f5bigip from "@pulumi/f5bigip";
*
* const withPool = new f5bigip.GtmWideip("with_pool", {
* name: "app.example.com",
* type: "a",
* partition: "Common",
* description: "Application WideIP",
* lastResortPool: "a /Common/firstpool",
* poolLbMode: "round-robin",
* minimalResponse: "enabled",
* });
* ```
*
* ### Advanced WideIP Configuration
*
* ```typescript
* import * as pulumi from "@pulumi/pulumi";
* import * as f5bigip from "@pulumi/f5bigip";
*
* const advanced = new f5bigip.GtmWideip("advanced", {
* name: "advanced.example.com",
* type: "a",
* partition: "Common",
* description: "Advanced WideIP configuration",
* enabled: true,
* failureRcode: "servfail",
* failureRcodeResponse: "enabled",
* failureRcodeTtl: 300,
* lastResortPool: "a /Common/backup_pool",
* minimalResponse: "disabled",
* persistCidrIpv4: 24,
* persistCidrIpv6: 64,
* persistence: "enabled",
* poolLbMode: "topology",
* ttlPersistence: 7200,
* topologyPreferEdns0ClientSubnet: "enabled",
* loadBalancingDecisionLogVerbosities: [
* "pool-selection",
* "pool-member-selection",
* ],
* aliases: [
* "app1.example.com",
* "app2.example.com",
* ],
* });
* ```
*
* ### IPv6 WideIP
*
* ```typescript
* import * as pulumi from "@pulumi/pulumi";
* import * as f5bigip from "@pulumi/f5bigip";
*
* const ipv6 = new f5bigip.GtmWideip("ipv6", {
* name: "ipv6.example.com",
* type: "aaaa",
* partition: "Common",
* description: "IPv6 WideIP",
* enabled: true,
* poolLbMode: "round-robin",
* });
* ```
*
* ## Notes
*
* ### Pool Load Balancing Modes
*
* The `poolLbMode` determines how GTM distributes DNS queries across pools:
*
* - **round-robin**: Distributes queries equally across all available pools
* - **ratio**: Distributes queries based on pool ratios
* - **topology**: Uses topology records to determine the best pool
* - **global-availability**: Considers pool availability and load
* - **virtual-server-capacity**: Based on virtual server capacity
* - **least-connections**: Selects pool with fewest active connections
* - **lowest-round-trip-time**: Selects pool with lowest RTT
* - **fewest-hops**: Selects pool 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
* - **drop-packet**: Drops DNS packets (used for testing)
* - **fallback-ip**: Returns a fallback IP address
* - **virtual-server-score**: Based on virtual server scores
*
* ### Last Resort Pool Format
*
* The `lastResortPool` must be specified in the format: `<type> <partition>/<pool_name>`
*
* Examples:
* - `a /Common/firstpool` - IPv4 pool
* - `aaaa /Common/ipv6pool` - IPv6 pool
* - `cname /Prod/alias_pool` - CNAME pool
*
* ### Persistence
*
* When persistence is enabled:
* - GTM maintains a mapping of client IP addresses to pool members
* - Subsequent requests from the same client are directed to the same destination
* - The `persistCidrIpv4` and `persistCidrIpv6` settings determine the subnet mask used for grouping client IPs
* - Persistence records expire after `ttlPersistence` seconds
*
* ### Failure RCODE Response
*
* When a WideIP becomes unavailable (all pools are down):
* - If `failureRcodeResponse` is `disabled`: GTM returns no answer (NXDOMAIN)
* - If `failureRcodeResponse` is `enabled`: GTM returns the specified `failureRcode`
*
* Common RCODE values:
* - **noerror**: No error (returns empty response)
* - **servfail**: Server failure
* - **nxdomain**: Non-existent domain
* - **refused**: Query refused
*
* ### Aliases
*
* Aliases allow you to specify alternate domain names for the same WideIP configuration. When a DNS query is made for any of the aliases, it is handled by the same WideIP configuration.
*
* Example:
* ```typescript
* import * as pulumi from "@pulumi/pulumi";
* import * as f5bigip from "@pulumi/f5bigip";
*
* const app = new f5bigip.GtmWideip("app", {
* name: "app.example.com",
* type: "a",
* aliases: [
* "app-alias1.example.com",
* "app-alias2.example.com",
* "app.backup.example.com",
* ],
* });
* ```
*
* In this example, DNS queries for `app.example.com`, `app-alias1.example.com`, `app-alias2.example.com`, or `app.backup.example.com` will all be handled by the same WideIP configuration.
*
* ## API Endpoints
*
* This resource interacts with the following BIG-IP API endpoints:
*
* - `GET /mgmt/tm/gtm/wideip/<type>/<name>` - Read WideIP configuration
* - `POST /mgmt/tm/gtm/wideip/<type>` - Create WideIP
* - `PUT /mgmt/tm/gtm/wideip/<type>/<name>` - Update WideIP configuration
* - `DELETE /mgmt/tm/gtm/wideip/<type>/<name>` - Delete WideIP
*
* ## Related Resources
*
* - `f5bigip.GtmPool` - Manages GTM pools that can be referenced by WideIPs
* - `f5bigip.GtmServer` - Manages GTM servers that contain virtual servers
* - `f5bigip.GtmDatacenter` - Manages GTM data centers
* - `bigipGtmTopology` - Manages topology records for topology-based load balancing
*
* ## Import
*
* GTM WideIP resources can be imported using the format `type:/partition/name`. For example:
*
* ```sh
* $ pulumi import f5bigip:index/gtmWideip:GtmWideip example a:/Common/testwideip.local
* ```
*
* Additional import examples:
*
* Import an IPv6 WideIP
*
* ```sh
* $ pulumi import f5bigip:index/gtmWideip:GtmWideip ipv6_example aaaa:/Common/ipv6.example.com
* ```
*
* Import a CNAME WideIP
*
* ```sh
* $ pulumi import f5bigip:index/gtmWideip:GtmWideip cname_example cname:/Common/alias.example.com
* ```
*
* Import from a non-Common partition
*
* ```sh
* $ pulumi import f5bigip:index/gtmWideip:GtmWideip prod_example a:/Production/app.example.com
* ```
*/
export declare class GtmWideip extends pulumi.CustomResource {
/**
* Get an existing GtmWideip resource's state with the given name, ID, and optional extra
* properties used to qualify the lookup.
*
* @param name The _unique_ name of the resulting resource.
* @param id The _unique_ provider ID of the resource to lookup.
* @param state Any extra arguments used during the lookup.
* @param opts Optional settings to control the behavior of the CustomResource.
*/
static get(name: string, id: pulumi.Input<pulumi.ID>, state?: GtmWideipState, opts?: pulumi.CustomResourceOptions): GtmWideip;
/**
* Returns true if the given object is an instance of GtmWideip. This is designed to work even
* when multiple copies of the Pulumi SDK have been loaded into the same process.
*/
static isInstance(obj: any): obj is GtmWideip;
/**
* Specifies alternate domain names for the WideIP
*/
readonly aliases: pulumi.Output<string[] | undefined>;
/**
* User-defined description of the WideIP
*/
readonly description: pulumi.Output<string | undefined>;
/**
* Disabled state of the WideIP
*/
readonly disabled: pulumi.Output<boolean | undefined>;
/**
* Enable or disable the WideIP
*/
readonly enabled: pulumi.Output<boolean | undefined>;
/**
* Specifies the DNS RCODE used when failureRcodeResponse is enabled (noerror, formerr, servfail, nxdomain, notimp, refused, yxdomain, yxrrset, nxrrset, notauth, notzone)
*/
readonly failureRcode: pulumi.Output<string | undefined>;
/**
* Specifies whether to return a RCODE response to DNS queries when the WideIP is unavailable (enabled or disabled)
*/
readonly failureRcodeResponse: pulumi.Output<string | undefined>;
/**
* Specifies the negative caching TTL of the SOA for the RCODE response
*/
readonly failureRcodeTtl: pulumi.Output<number | undefined>;
/**
* Specifies the last resort pool for the WideIP. Format: <type> <partition>/<pool_name> (e.g., 'a /Common/firstpool')
*/
readonly lastResortPool: pulumi.Output<string | undefined>;
/**
* Specifies the amount of detail logged when making load balancing decisions. Example: ['pool-selection']
*/
readonly loadBalancingDecisionLogVerbosities: pulumi.Output<string[] | undefined>;
/**
* Specifies whether to minimize the response to the DNS query (enabled or disabled)
*/
readonly minimalResponse: pulumi.Output<string | undefined>;
/**
* Name of the WideIP. Example: testwideip.local
*/
readonly name: pulumi.Output<string>;
/**
* Partition in which the WideIP resides
*/
readonly partition: pulumi.Output<string | undefined>;
/**
* Specifies the CIDR for IPv4 persistence
*/
readonly persistCidrIpv4: pulumi.Output<number | undefined>;
/**
* Specifies the CIDR for IPv6 persistence
*/
readonly persistCidrIpv6: pulumi.Output<number | undefined>;
/**
* Specifies persistence for the WideIP (disabled or enabled)
*/
readonly persistence: pulumi.Output<string | undefined>;
/**
* Specifies the load balancing mode for pools in the WideIP (round-robin, ratio, topology, global-availability)
*/
readonly poolLbMode: pulumi.Output<string | undefined>;
/**
* Specifies whether to prefer EDNS0 client subnet data for topology-based load balancing (enabled or disabled)
*/
readonly topologyPreferEdns0ClientSubnet: pulumi.Output<string | undefined>;
/**
* Specifies the TTL for the persistence of the WideIP
*/
readonly ttlPersistence: pulumi.Output<number | undefined>;
/**
* Specifies the type of WideIP (a, aaaa, cname, mx, naptr, srv)
*/
readonly type: pulumi.Output<string>;
/**
* Create a GtmWideip resource with the given unique name, arguments, and options.
*
* @param name The _unique_ name of the resource.
* @param args The arguments to use to populate this resource's properties.
* @param opts A bag of options that control this resource's behavior.
*/
constructor(name: string, args: GtmWideipArgs, opts?: pulumi.CustomResourceOptions);
}
/**
* Input properties used for looking up and filtering GtmWideip resources.
*/
export interface GtmWideipState {
/**
* Specifies alternate domain names for the WideIP
*/
aliases?: pulumi.Input<pulumi.Input<string>[] | undefined>;
/**
* User-defined description of the WideIP
*/
description?: pulumi.Input<string | undefined>;
/**
* Disabled state of the WideIP
*/
disabled?: pulumi.Input<boolean | undefined>;
/**
* Enable or disable the WideIP
*/
enabled?: pulumi.Input<boolean | undefined>;
/**
* Specifies the DNS RCODE used when failureRcodeResponse is enabled (noerror, formerr, servfail, nxdomain, notimp, refused, yxdomain, yxrrset, nxrrset, notauth, notzone)
*/
failureRcode?: pulumi.Input<string | undefined>;
/**
* Specifies whether to return a RCODE response to DNS queries when the WideIP is unavailable (enabled or disabled)
*/
failureRcodeResponse?: pulumi.Input<string | undefined>;
/**
* Specifies the negative caching TTL of the SOA for the RCODE response
*/
failureRcodeTtl?: pulumi.Input<number | undefined>;
/**
* Specifies the last resort pool for the WideIP. Format: <type> <partition>/<pool_name> (e.g., 'a /Common/firstpool')
*/
lastResortPool?: pulumi.Input<string | undefined>;
/**
* Specifies the amount of detail logged when making load balancing decisions. Example: ['pool-selection']
*/
loadBalancingDecisionLogVerbosities?: pulumi.Input<pulumi.Input<string>[] | undefined>;
/**
* Specifies whether to minimize the response to the DNS query (enabled or disabled)
*/
minimalResponse?: pulumi.Input<string | undefined>;
/**
* Name of the WideIP. Example: testwideip.local
*/
name?: pulumi.Input<string | undefined>;
/**
* Partition in which the WideIP resides
*/
partition?: pulumi.Input<string | undefined>;
/**
* Specifies the CIDR for IPv4 persistence
*/
persistCidrIpv4?: pulumi.Input<number | undefined>;
/**
* Specifies the CIDR for IPv6 persistence
*/
persistCidrIpv6?: pulumi.Input<number | undefined>;
/**
* Specifies persistence for the WideIP (disabled or enabled)
*/
persistence?: pulumi.Input<string | undefined>;
/**
* Specifies the load balancing mode for pools in the WideIP (round-robin, ratio, topology, global-availability)
*/
poolLbMode?: pulumi.Input<string | undefined>;
/**
* Specifies whether to prefer EDNS0 client subnet data for topology-based load balancing (enabled or disabled)
*/
topologyPreferEdns0ClientSubnet?: pulumi.Input<string | undefined>;
/**
* Specifies the TTL for the persistence of the WideIP
*/
ttlPersistence?: pulumi.Input<number | undefined>;
/**
* Specifies the type of WideIP (a, aaaa, cname, mx, naptr, srv)
*/
type?: pulumi.Input<string | undefined>;
}
/**
* The set of arguments for constructing a GtmWideip resource.
*/
export interface GtmWideipArgs {
/**
* Specifies alternate domain names for the WideIP
*/
aliases?: pulumi.Input<pulumi.Input<string>[] | undefined>;
/**
* User-defined description of the WideIP
*/
description?: pulumi.Input<string | undefined>;
/**
* Disabled state of the WideIP
*/
disabled?: pulumi.Input<boolean | undefined>;
/**
* Enable or disable the WideIP
*/
enabled?: pulumi.Input<boolean | undefined>;
/**
* Specifies the DNS RCODE used when failureRcodeResponse is enabled (noerror, formerr, servfail, nxdomain, notimp, refused, yxdomain, yxrrset, nxrrset, notauth, notzone)
*/
failureRcode?: pulumi.Input<string | undefined>;
/**
* Specifies whether to return a RCODE response to DNS queries when the WideIP is unavailable (enabled or disabled)
*/
failureRcodeResponse?: pulumi.Input<string | undefined>;
/**
* Specifies the negative caching TTL of the SOA for the RCODE response
*/
failureRcodeTtl?: pulumi.Input<number | undefined>;
/**
* Specifies the last resort pool for the WideIP. Format: <type> <partition>/<pool_name> (e.g., 'a /Common/firstpool')
*/
lastResortPool?: pulumi.Input<string | undefined>;
/**
* Specifies the amount of detail logged when making load balancing decisions. Example: ['pool-selection']
*/
loadBalancingDecisionLogVerbosities?: pulumi.Input<pulumi.Input<string>[] | undefined>;
/**
* Specifies whether to minimize the response to the DNS query (enabled or disabled)
*/
minimalResponse?: pulumi.Input<string | undefined>;
/**
* Name of the WideIP. Example: testwideip.local
*/
name: pulumi.Input<string>;
/**
* Partition in which the WideIP resides
*/
partition?: pulumi.Input<string | undefined>;
/**
* Specifies the CIDR for IPv4 persistence
*/
persistCidrIpv4?: pulumi.Input<number | undefined>;
/**
* Specifies the CIDR for IPv6 persistence
*/
persistCidrIpv6?: pulumi.Input<number | undefined>;
/**
* Specifies persistence for the WideIP (disabled or enabled)
*/
persistence?: pulumi.Input<string | undefined>;
/**
* Specifies the load balancing mode for pools in the WideIP (round-robin, ratio, topology, global-availability)
*/
poolLbMode?: pulumi.Input<string | undefined>;
/**
* Specifies whether to prefer EDNS0 client subnet data for topology-based load balancing (enabled or disabled)
*/
topologyPreferEdns0ClientSubnet?: pulumi.Input<string | undefined>;
/**
* Specifies the TTL for the persistence of the WideIP
*/
ttlPersistence?: pulumi.Input<number | undefined>;
/**
* Specifies the type of WideIP (a, aaaa, cname, mx, naptr, srv)
*/
type: pulumi.Input<string>;
}
//# sourceMappingURL=gtmWideip.d.ts.map