// Package lbpools provides access to load balancer pools associated with a
// RackConnect configuration. Load Balancer Pools must be configured in advance
// by your Network Security team to be eligible for use with RackConnect.
// If you do not see a pool that you expect to see, contact your Support team
// for further assistance. The Load Balancer Pool id returned by these calls is
// automatically generated by the RackConnect automation and will remain constant
// unless the Load Balancer Pool is renamed on your hardware load balancer.
// All Load Balancer Pools will currently return a status of ACTIVE. Future
// features may introduce additional statuses.
// Node status values are ADDING, ACTIVE, REMOVING, ADD_FAILED, and REMOVE_FAILED.
// The cloud_servers node count will only include Cloud Servers from the specified
// cloud account. Any dedicated servers or cloud servers from another cloud account
// on the same RackConnect Configuration will be counted as external nodes.
package lbpools
