Current section

Files

Jump to
erlcloud src erlcloud_elb.erl
Raw

src/erlcloud_elb.erl

-module(erlcloud_elb).
%% Library initialization.
-export([configure/2, configure/3, new/2, new/3]).
%% ELB API Functions
-export([create_load_balancer/3, create_load_balancer/4, create_load_balancer/5,
delete_load_balancer/1, delete_load_balancer/2,
register_instance/2, register_instance/3,
deregister_instance/2, deregister_instance/3,
describe_load_balancer/1, describe_load_balancer/2,
describe_load_balancers/1, describe_load_balancers/2,
configure_health_check/2, configure_health_check/3]).
-include_lib("erlcloud/include/erlcloud.hrl").
-include_lib("erlcloud/include/erlcloud_aws.hrl").
-define(API_VERSION, "2012-06-01").
-import(erlcloud_xml, [get_text/2]).
-spec(new/2 :: (string(), string()) -> aws_config()).
new(AccessKeyID, SecretAccessKey) ->
#aws_config{access_key_id=AccessKeyID,
secret_access_key=SecretAccessKey}.
-spec(new/3 :: (string(), string(), string()) -> aws_config()).
new(AccessKeyID, SecretAccessKey, Host) ->
#aws_config{access_key_id=AccessKeyID,
secret_access_key=SecretAccessKey,
elb_host=Host}.
-spec(configure/2 :: (string(), string()) -> ok).
configure(AccessKeyID, SecretAccessKey) ->
put(aws_config, new(AccessKeyID, SecretAccessKey)),
ok.
-spec(configure/3 :: (string(), string(), string()) -> ok).
configure(AccessKeyID, SecretAccessKey, Host) ->
put(aws_config, new(AccessKeyID, SecretAccessKey, Host)),
ok.
default_config() -> erlcloud_aws:default_config().
create_load_balancer(LB, Port, Protocol) when is_list(LB),
is_integer(Port),
is_atom(Protocol) ->
create_load_balancer(LB, Port, Protocol, default_config()).
create_load_balancer(LB, Port, Protocol, Config) when is_list(LB),
is_integer(Port),
is_atom(Protocol) ->
create_load_balancer(LB, Port, Protocol, "us-east-1d", Config).
create_load_balancer(LB, Port, Protocol, Zone, Config) when is_list(LB),
is_integer(Port),
is_atom(Protocol),
is_list(Zone) ->
XML = elb_request(Config,
"CreateLoadBalancer",
[{"AvailabilityZones.member.1", Zone},
{"LoadBalancerName", LB} |
erlcloud_aws:param_list([[{"LoadBalancerPort", Port},
{"InstancePort", Port},
{"Protocol", string:to_upper(atom_to_list(Protocol))}]],
"Listeners.member")]),
{ok, get_text("/CreateLoadBalancerResponse/CreateLoadBalancerResult/DNSName", XML)}.
delete_load_balancer(LB) when is_list(LB) ->
delete_load_balancer(LB, default_config()).
delete_load_balancer(LB, Config) when is_list(LB) ->
elb_simple_request(Config,
"DeleteLoadBalancer",
[{"LoadBalancerName", LB}]).
-spec register_instance/2 :: (string(), string()) -> proplist().
register_instance(LB, InstanceId) ->
register_instance(LB, InstanceId, default_config()).
-spec register_instance/3 :: (string(), string(), aws_config()) -> proplist().
register_instance(LB, InstanceId, Config) when is_list(LB) ->
elb_simple_request(Config,
"RegisterInstancesWithLoadBalancer",
[{"LoadBalancerName", LB} |
erlcloud_aws:param_list([[{"InstanceId", InstanceId}]], "Instances.member")]).
-spec deregister_instance/2 :: (string(), string()) -> proplist().
deregister_instance(LB, InstanceId) ->
deregister_instance(LB, InstanceId, default_config()).
-spec deregister_instance/3 :: (string(), string(), aws_config()) -> proplist().
deregister_instance(LB, InstanceId, Config) when is_list(LB) ->
elb_simple_request(Config,
"DeregisterInstancesFromLoadBalancer",
[{"LoadBalancerName", LB} |
erlcloud_aws:param_list([[{"InstanceId", InstanceId}]], "Instances.member")]).
-spec configure_health_check/2 :: (string(), string()) -> proplist().
configure_health_check(LB, Target) when is_list(LB),
is_list(Target) ->
configure_health_check(LB, Target, default_config()).
-spec configure_health_check/3 :: (string(), string(), aws_config()) -> proplist().
configure_health_check(LB, Target, Config) when is_list(LB) ->
elb_simple_request(Config,
"ConfigureHealthCheck",
[{"LoadBalancerName", [LB]},
{"HealthCheck.Target", Target}]).
describe_load_balancer(Name) ->
describe_load_balancer(Name, default_config()).
describe_load_balancer(Name, Config) ->
describe_load_balancers([Name], Config).
describe_load_balancers(Names) ->
describe_load_balancers(Names, default_config()).
describe_load_balancers(Names, Config) ->
elb_request(Config,
"DescribeLoadBalancers",
[erlcloud_aws:param_list(Names, "LoadBalancerNames.member")]).
elb_request(Config, Action, Params) ->
QParams = [{"Action", Action}, {"Version", ?API_VERSION} | Params],
erlcloud_aws:aws_request_xml(get, Config#aws_config.elb_host,
"/", QParams, Config).
elb_simple_request(Config, Action, Params) ->
_Doc = elb_request(Config, Action, Params),
ok.