frostmoln_lb_pool (Resource)
Manages a backend pool on a Frostmoln load balancer.
Authoritative scope — who owns what on this resource, declared in internal/scopedecl and machine-checked against the schema.
Enacted and reconciled — every configurable attribute not listed below: the platform applies it, and a refresh reads the truth back.
Create-immutable — listener_id, load_balancer_id, protocol: the pool's identity is its listener, load balancer and protocol; changing one is a different pool.
Observed, not enacted — tags_all: keys set outside Terraform — in the portal, by the fm CLI, or stamped by the platform — appear only here and are kept on every apply, never removed.
Example Usage
# A backend pool for a load balancer.
#
# The pool's listener_id attaches this pool to a listener. This is the canonical
# direction for the listener<->pool link; do NOT also set default_pool_id on the
# listener, or Terraform will report a dependency cycle.
resource "frostmoln_lb_pool" "backend" {
load_balancer_id = frostmoln_load_balancer.web.id
listener_id = frostmoln_lb_listener.https.id
name = "backend"
protocol = "http"
lb_algorithm = "round_robin"
proxy_protocol = "none"
# Optional session persistence (nested attribute). Omit for none.
session_persistence = {
type = "APP_COOKIE"
cookie_name = "SESSIONID"
persistence_timeout = 3600
}
# The pool's OWN tags. The load balancer's tags are separate and are not
# inherited; removing this block removes every tag from the pool.
tags = {
env = "prod"
owner = "team-a"
}
}Schema
Required
lb_algorithm(String) The load balancing algorithm: round_robin, least_connections, source_ip, or source_ip_port (source_ip_port is required on an l4 load balancer, which accepts no other algorithm).load_balancer_id(String) The ID of the load balancer this pool belongs to. Changing this forces a new resource.name(String) The name of the pool.protocol(String) The pool protocol: tcp, udp, sctp, http, https, or terminated_https.
Optional
listener_id(String) The ID of the listener this pool is attached to. Changing this forces a new resource.proxy_protocol(String) The PROXY protocol version sent to backend members: none (default), v1, or v2.session_persistence(Attributes) Session persistence configuration for the pool. Omit for no persistence. (see below for nested schema)tags(Map of String) Key-value tags for the pool. These are the pool's own tags, separate from the load balancer's. Merged with the provider'sdefault_tagson every write (a key set here wins). Holds only the keys this configuration sets; the full set is intags_all.timeouts(Block, Optional) (see below for nested schema)
Read-Only
created_at(String) The creation timestamp.id(String) The unique identifier of the pool.tags_all(Map of String) Every tag the platform holds on this resource: the provider'sdefault_tags, this resource's owntags(which win on a shared key), and any key set outside Terraform — in the portal, by the fm CLI, or stamped by the platform. Keys set outside Terraform appear only here and are kept on every apply, never removed.updated_at(String) The last update timestamp.
Nested Schema for session_persistence
Required:
type(String) The session persistence type: SOURCE_IP, HTTP_COOKIE, or APP_COOKIE.Optional:
cookie_name(String) The cookie name to use for persistence (required for APP_COOKIE).persistence_granularity(String) The persistence granularity (netmask) for SOURCE_IP persistence.persistence_timeout(Number) The persistence timeout in seconds.
Nested Schema for timeouts
Optional:
create(String) How long the provider waits for the create operation to converge before giving up (e.g. "45m", "2h").delete(String) How long the provider waits for the delete to complete before giving up (e.g. "30m").update(String) How long the provider waits for an update (resize, in-place change) to converge before giving up (e.g. "30m").