module AWS.ELB.LoadBalancer
( describeLoadBalancers
) where
import Data.Text (Text)
import Data.Conduit
import Control.Applicative
import Data.XML.Types (Event(..))
import AWS.Lib.Parser
import AWS.Lib.Query
import AWS.ELB.Types
import AWS.ELB.Internal
describeLoadBalancers
:: (MonadBaseControl IO m, MonadResource m)
=> [Text]
-> Maybe Text
-> ELB m [LoadBalancerDescription]
describeLoadBalancers lbs marker =
elbQuery "DescribeLoadBalancers" params sinkLoadBalancers
where
params =
[ "LoadBalancerNames.member" |.#= lbs
, "Marker" |=? marker
]
sinkLoadBalancers :: MonadThrow m
=> GLSink Event m [LoadBalancerDescription]
sinkLoadBalancers = members "LoadBalancerDescriptions" $
LoadBalancerDescription
<$> members "SecurityGroups" text
<*> getT "LoadBalancerName"
<*> getT "CreatedTime"
<*> element "HealthCheck"
(HealthCheck
<$> getT "Interval"
<*> getT "Target"
<*> getT "HealthyThreshold"
<*> getT "Timeout"
<*> getT "UnhealthyThreshold"
)
<*> getT "VPCId"
<*> members "ListenerDescriptions"
(ListenerDescription
<$> members "PolicyNames" text
<*> element "Listener"
(Listener
<$> getT "Protocol"
<*> getT "LoadBalancerPort"
<*> getT "InstanceProtocol"
<*> getT "SSLCertificateId"
<*> getT "InstancePort"
)
)
<*> members "Instances"
(Instance <$> getT "InstanceId")
<*> element "Policies"
(Policies
<$> members "AppCookieStickinessPolicies"
(AppCookieStickinessPolicy
<$> getT "CookieName"
<*> getT "PolicyName"
)
<*> members "OtherPolicies" text
<*> members "LBCookieStickinessPolicies"
(LBCookieStickinessPolicy
<$> getT "CookieExpirationPeriod"
<*> getT "PolicyName"
)
)
<*> members "AvailabilityZones" text
<*> getT "CanonicalHostedZoneName"
<*> getT "CanonicalHostedZoneNameID"
<*> getT "Scheme"
<*> elementM "SourceSecurityGroup"
(SourceSecurityGroup
<$> getT "OwnerAlias"
<*> getT "GroupName"
)
<*> getT "DNSName"
<*> members "BackendServerDescriptions"
(BackendServerDescription
<$> getT "InstancePort"
<*> members "PolicyNames" text
)
<*> members "Subnets" text