Packages
erlcloud
3.2.7
3.8.3
3.8.2
3.8.1
3.7.6
3.7.4
3.7.3
3.7.2
3.7.1
3.7.0
3.6.8
3.6.7
3.6.5
3.6.4
3.6.3
3.6.2
3.6.1
3.6.0
3.5.16
3.5.15
3.5.14
3.5.13
3.5.12
3.5.11
3.5.10
3.5.9
3.5.8
3.5.7
3.5.6
3.5.5
3.5.4
3.5.3
3.5.2
3.5.1
3.5.0
3.4.5
3.4.3
3.4.1
3.4.0
3.3.9
3.3.8
3.3.7
3.3.6
3.3.5
3.3.4
3.3.3
3.3.2
3.3.1
3.3.0
3.2.18
3.2.17
3.2.16
3.2.15
3.2.14
3.2.13
3.2.12
3.2.11
3.2.10
3.2.7
3.2.6
3.2.5
3.2.4
3.2.3
3.2.2
3.2.1
3.2.0
3.1.17
3.1.16
3.1.14
3.1.13
3.1.12
3.1.11
3.1.9
3.1.8
3.1.7
3.1.6
3.1.5
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
2.2.16
2.2.15
2.2.14
2.2.13
2.2.12
2.2.11
2.2.10
2.2.9
2.2.8
2.2.7
2.2.6
2.2.5
2.2.4
2.2.2
2.2.1
2.2.0
2.1.0
2.0.5
2.0.4
2.0.3
2.0.0
0.13.10
0.13.9
0.13.8
0.13.6
0.13.5
0.13.4
0.13.3
0.13.2
0.13.0
0.12.0
0.11.0
0.9.2
0.9.2-rc.1
0.9.1
0.9.0
AWS APIs library for Erlang
Current section
Files
Jump to
Current section
Files
src/erlcloud_autoscaling.erl
%%
%% Amazon Auto Scaling Web Service API Client.
%% Documentation - http://docs.aws.amazon.com/AutoScaling/latest/APIReference/API_Operations.html
%%
-module(erlcloud_autoscaling).
-author('pavel@alertlogic.com').
-export([configure/2, configure/3, new/2, new/3]).
-export([describe_autoscaling_groups/0, describe_autoscaling_groups/1, describe_autoscaling_groups/2,
describe_launch_configurations/0, describe_launch_configurations/1, describe_launch_configurations/2,
describe_autoscaling_groups_all/0, describe_autoscaling_groups_all/1, describe_autoscaling_groups_all/2,
describe_launch_configurations_all/0, describe_launch_configurations_all/1, describe_launch_configurations_all/2
]).
-include("erlcloud.hrl").
-include("erlcloud_aws.hrl").
-include_lib("xmerl/include/xmerl.hrl").
-import(erlcloud_xml, [get_text/1, get_text/2, get_bool/2, get_integer/2]).
-define(API_VERSION, "2011-01-01").
-define(SERVICE_NAME, "autoscaling").
-spec new(string(), string()) -> aws_config().
new(AccessKeyID, SecretAccessKey) ->
#aws_config{access_key_id=AccessKeyID,
secret_access_key=SecretAccessKey}.
-spec new(string(), string(), string()) -> aws_config().
new(AccessKeyID, SecretAccessKey, Host) ->
#aws_config{access_key_id=AccessKeyID,
secret_access_key=SecretAccessKey,
autoscaling_host=Host}.
-spec configure(string(), string()) -> ok.
configure(AccessKeyID, SecretAccessKey) ->
erlcloud_config:configure(AccessKeyID, SecretAccessKey, fun new/2).
-spec configure(string(), string(), string()) -> ok.
configure(AccessKeyID, SecretAccessKey, Host) ->
erlcloud_config:configure(AccessKeyID, SecretAccessKey, Host, fun new/3).
-spec describe_autoscaling_groups() -> {string(), proplist()} | {error, term()}.
describe_autoscaling_groups() -> describe_autoscaling_groups([]).
-spec describe_autoscaling_groups([string()] | aws_config()) -> {string(), proplist()} | {error, term()}.
describe_autoscaling_groups(Config) when is_record(Config, aws_config) ->
describe_autoscaling_groups([], Config);
describe_autoscaling_groups(GroupNames) ->
describe_autoscaling_groups(GroupNames, default_config()).
-spec describe_autoscaling_groups([string()], aws_config()) -> {string(), proplist()} | {error, term()}.
describe_autoscaling_groups(GroupNames, Config)
when is_list(GroupNames), is_record(Config, aws_config) ->
%case autoscaling_query(Config, "DescribeAutoScalingGroups", []) of % erlcloud_aws:param_list(GroupNames, "AutoScalingGroupNames.member")) of
case autoscaling_query(Config, "DescribeAutoScalingGroups", erlcloud_aws:param_list(GroupNames, "AutoScalingGroupNames.member")) of
{ok, Doc} ->
Groups = xmerl_xpath:string("/DescribeAutoScalingGroupsResponse/DescribeAutoScalingGroupsResult/AutoScalingGroups/member", Doc),
{erlcloud_util:next_token("/DescribeAutoScalingGroupsResponse/DescribeAutoScalingGroupsResult/NextToken", Doc), [extract_autoscaling_group(Group) || Group <- Groups]};
{error, Reason} ->
{error, Reason}
end.
-spec describe_autoscaling_groups_all() -> {ok, proplist()} | {error, term()}.
describe_autoscaling_groups_all() -> describe_autoscaling_groups_all([]).
-spec describe_autoscaling_groups_all([string()] | aws_config()) -> {ok, proplist()} | {error, term()}.
describe_autoscaling_groups_all(Config) when is_record(Config, aws_config) ->
describe_autoscaling_groups_all([], Config);
describe_autoscaling_groups_all(GroupNames) ->
describe_autoscaling_groups_all(GroupNames, default_config()).
-spec describe_autoscaling_groups_all([string()], aws_config()) -> {ok, proplist()} | {error, term()}.
describe_autoscaling_groups_all(GroupNames, Config)
when is_list(GroupNames), is_record(Config, aws_config) ->
%case autoscaling_query(Config, "DescribeAutoScalingGroups", []) of % erlcloud_aws:param_list(GroupNames, "AutoScalingGroupNames.member")) of
case erlcloud_util:query_all_token(fun autoscaling_query/3, Config, "DescribeAutoScalingGroups", erlcloud_aws:param_list(GroupNames, "AutoScalingGroupNames.member")) of
{ok, Docs} ->
Groups = lists:append([xmerl_xpath:string("/DescribeAutoScalingGroupsResponse/DescribeAutoScalingGroupsResult/AutoScalingGroups/member", Doc) || Doc <- Docs]),
{ok, [extract_autoscaling_group(Group) || Group <- Groups]};
{error, Reason} ->
{error, Reason}
end.
-spec describe_launch_configurations() -> {string(), proplist()} | {error, term()}.
describe_launch_configurations() -> describe_launch_configurations([]).
-spec describe_launch_configurations([string()] | aws_config()) -> {string(), proplist()} | {error, term()}.
describe_launch_configurations(Config) when is_record(Config, aws_config) ->
describe_launch_configurations([], Config);
describe_launch_configurations(ConfiguratoinNames) ->
describe_launch_configurations(ConfiguratoinNames, default_config()).
-spec describe_launch_configurations([string()], aws_config()) -> {string(), proplist()} | {error, term()}.
describe_launch_configurations(ConfiguratoinNames, Config)
when is_list(ConfiguratoinNames), is_record(Config, aws_config) ->
case autoscaling_query(Config, "DescribeLaunchConfigurations", erlcloud_aws:param_list(ConfiguratoinNames, "LaunchConfigurationNames.member")) of
{ok, Doc} ->
Configurations = xmerl_xpath:string("/DescribeLaunchConfigurationsResponse/DescribeLaunchConfigurationsResult/LaunchConfigurations/member", Doc),
{erlcloud_util:next_token("/DescribeLaunchConfigurationsResponse/DescribeLaunchConfigurationsResult/NextToken", Doc), [extract_launch_configuration(Configuration) || Configuration <- Configurations]};
{error, Reason} ->
{error, Reason}
end.
-spec describe_launch_configurations_all() -> {ok, proplist()} | {error, term()}.
describe_launch_configurations_all() -> describe_launch_configurations_all([]).
-spec describe_launch_configurations_all([string()] | aws_config()) -> {ok, proplist()} | {error, term()}.
describe_launch_configurations_all(Config) when is_record(Config, aws_config) ->
describe_launch_configurations_all([], Config);
describe_launch_configurations_all(ConfiguratoinNames) ->
describe_launch_configurations_all(ConfiguratoinNames, default_config()).
-spec describe_launch_configurations_all([string()], aws_config()) -> {ok, proplist()} | {error, term()}.
describe_launch_configurations_all(ConfiguratoinNames, Config)
when is_list(ConfiguratoinNames), is_record(Config, aws_config) ->
case erlcloud_util:query_all_token(fun autoscaling_query/3, Config, "DescribeLaunchConfigurations", erlcloud_aws:param_list(ConfiguratoinNames, "LaunchConfigurationNames.member")) of
{ok, Docs} ->
Configurations = lists:append([xmerl_xpath:string("/DescribeLaunchConfigurationsResponse/DescribeLaunchConfigurationsResult/LaunchConfigurations/member", Doc) || Doc <- Docs]),
{ok, [extract_launch_configuration(Configuration) || Configuration <- Configurations]};
{error, Reason} ->
{error, Reason}
end.
%
% @private
%
extract_autoscaling_group(Item) ->
[
{autoscaling_group_name, get_text("AutoScalingGroupName", Item)},
{autoscaling_group_arn, get_text("AutoScalingGroupARN", Item)},
{launch_configuration_name, get_text("LaunchConfigurationName", Item)},
{min_size, get_integer("MinSize", Item)},
{max_size, get_integer("MaxSize", Item)},
{create_time, erlcloud_xml:get_time("CreatedTime", Item)},
{health_check_type, get_text("HealthCheckType", Item)},
{desired_capacity, get_integer("DesiredCapacity", Item)},
{placement_group, get_text("PlacementGroup", Item)},
{status, get_text("Status", Item)},
{subnets, string:tokens(get_text("VPCZoneIdentifier", Item), ",")},
{availability_zones, [get_text(Z) || Z <- xmerl_xpath:string("AvailabilityZones/member", Item)]},
{load_balancers, [get_text(L) || L <- xmerl_xpath:string("LoadBalancerNames/member", Item)]},
{instances, [extract_instance(I) || I <- xmerl_xpath:string("Instances/member", Item)]},
{tag_set, [extract_tag_item(Tag) || Tag<- xmerl_xpath:string("Tags/member", Item)]}
].
extract_instance(Node) ->
[
{instance_id, get_text("InstanceId", Node)},
{launch_configuration_name, get_text("LaunchConfigurationName", Node)},
{lifecycle_state, get_text("LifecycleState", Node)},
{health_status, get_text("HealthStatus", Node)},
{availability_zone, get_text("AvailabilityZone", Node)}
].
extract_tag_item(Node) ->
[
{key, get_text("Key", Node)},
{value, get_text("Value", Node)},
{propogate_at_launch, get_text("PropagateAtLaunch", Node)},
{resource_id, get_text("ResourceId", Node)},
{resource_type, get_text("ResourceType", Node)}
].
extract_launch_configuration(Item) ->
[
{launch_configuration_name, get_text("LaunchConfigurationName", Item)},
{launch_configuration_arn, get_text("LaunchConfigurationARN", Item)},
{image_id, get_text("ImageId", Item)},
{kernel_id, get_text("KernelId", Item)},
{ramdisk_id, get_text("RamdiskId", Item)},
{instance_type, get_text("InstanceType", Item)},
{iam_instance_profile, get_text("IamInstanceProfile", Item)},
{associate_public_ip_address, get_bool("AssociatePublicIpAddress", Item)},
{placement_tenancy, get_text("PlacementTenancy", Item)},
{create_time, erlcloud_xml:get_time("CreatedTime", Item)},
{key_name, get_text("KeyName", Item)},
{user_data, get_text("UserData", Item)},
{security_groups, [get_text(L) || L <- xmerl_xpath:string("SecurityGroups/member", Item)]}
].
autoscaling_query(Config, Action, Params) ->
autoscaling_query(Config, Action, Params, ?API_VERSION).
autoscaling_query(Config, Action, Params, ApiVersion) ->
QParams = [{"Action", Action}, {"Version", ApiVersion}|Params],
erlcloud_aws:aws_request_xml4(post,
Config#aws_config.autoscaling_host,
"/", QParams, ?SERVICE_NAME, Config).
default_config() -> erlcloud_aws:default_config().