aws-sdk 1.3.8 → 1.3.9
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/aws.rb +2 -0
- data/lib/aws/api_config/AutoScaling-2011-01-01.yml +563 -0
- data/lib/aws/auto_scaling.rb +162 -0
- data/lib/aws/auto_scaling/activity.rb +102 -0
- data/lib/aws/auto_scaling/activity_collection.rb +82 -0
- data/lib/aws/auto_scaling/client.rb +50 -0
- data/lib/aws/auto_scaling/client/xml.rb +32 -0
- data/lib/aws/auto_scaling/config.rb +18 -0
- data/lib/aws/auto_scaling/errors.rb +26 -0
- data/lib/aws/auto_scaling/group.rb +420 -0
- data/lib/aws/auto_scaling/group_collection.rb +96 -0
- data/lib/aws/auto_scaling/group_options.rb +146 -0
- data/lib/aws/auto_scaling/instance.rb +192 -0
- data/lib/aws/auto_scaling/instance_collection.rb +63 -0
- data/lib/aws/auto_scaling/launch_configuration.rb +150 -0
- data/lib/aws/auto_scaling/launch_configuration_collection.rb +144 -0
- data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
- data/lib/aws/auto_scaling/notification_configuration_collection.rb +184 -0
- data/lib/aws/auto_scaling/request.rb +24 -0
- data/lib/aws/auto_scaling/scaling_policy.rb +125 -0
- data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
- data/lib/aws/auto_scaling/scaling_policy_options.rb +61 -0
- data/lib/aws/auto_scaling/scheduled_action.rb +145 -0
- data/lib/aws/auto_scaling/scheduled_action_collection.rb +195 -0
- data/lib/aws/auto_scaling/tag.rb +59 -0
- data/lib/aws/auto_scaling/tag_collection.rb +112 -0
- data/lib/aws/core.rb +40 -8
- data/lib/aws/core/client.rb +28 -3
- data/lib/aws/core/configuration.rb +38 -31
- data/lib/aws/core/http/request.rb +3 -3
- data/lib/aws/core/http/response.rb +2 -1
- data/lib/aws/core/log_formatter.rb +454 -0
- data/lib/aws/core/resource.rb +2 -1
- data/lib/aws/core/response.rb +5 -0
- data/lib/aws/core/uri_escape.rb +1 -1
- data/lib/aws/core/xml_grammar.rb +21 -0
- data/lib/aws/dynamo_db/request.rb +1 -1
- data/lib/aws/ec2/network_acl_collection.rb +1 -2
- data/lib/aws/ec2/route_table_collection.rb +1 -2
- data/lib/aws/ec2/vpn_gateway_collection.rb +1 -1
- data/lib/aws/elb/load_balancer.rb +0 -2
- data/lib/aws/errors.rb +2 -2
- data/lib/aws/s3/object_version_collection.rb +1 -1
- data/lib/aws/s3/s3_object.rb +4 -4
- data/lib/aws/sqs/queue.rb +2 -2
- metadata +52 -27
- data/lib/aws/core/client_logging.rb +0 -133
@@ -0,0 +1,144 @@
|
|
1
|
+
# Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
5
|
+
# the License is located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
12
|
+
# language governing permissions and limitations under the License.
|
13
|
+
|
14
|
+
require 'base64'
|
15
|
+
|
16
|
+
module AWS
|
17
|
+
class AutoScaling
|
18
|
+
class LaunchConfigurationCollection
|
19
|
+
|
20
|
+
include Core::Collection::Limitable
|
21
|
+
|
22
|
+
# Creates an Auto Scaling launch configuration.
|
23
|
+
#
|
24
|
+
# auto_scaling.launch_configurations.create('name', 'ami-12345', 'm1.small')
|
25
|
+
#
|
26
|
+
# @param [String] name The name of the launch configuration to create.
|
27
|
+
#
|
28
|
+
# @param [EC2::Image,String] image An {EC2::Image} or image id string.
|
29
|
+
#
|
30
|
+
# @param [String] instance_type The type of instance (e.g.
|
31
|
+
# 't1.micro', 'm1.small', 'm2.4xlarge', etc).
|
32
|
+
#
|
33
|
+
# @param [Hash] options
|
34
|
+
#
|
35
|
+
# @option options [Array<Hash>] :block_device_mappings
|
36
|
+
#
|
37
|
+
# @option options [Boolean] :detailed_instance_monitoring (true)
|
38
|
+
# When enabled, CloudWatch will generate metrics every minute
|
39
|
+
# and your account will be charged a fee. When you disable
|
40
|
+
# detailed monitoring, by specifying False, Cloudwatch will
|
41
|
+
# generate metrics every 5 minutes.
|
42
|
+
#
|
43
|
+
# @option options [String] :kernel_id The ID of the kernel to
|
44
|
+
# launch the instances with.
|
45
|
+
#
|
46
|
+
# @option options [KeyPair,String] :key_pair The keypair to launch
|
47
|
+
# instances with. This may be an {EC2::KeyPair} object or
|
48
|
+
# or key pair name string.
|
49
|
+
#
|
50
|
+
# @option options [String] :ramdisk_id The ID of the ramdisk to
|
51
|
+
# launch the instances with.
|
52
|
+
#
|
53
|
+
# @option options [Array<EC2::SecurityGroup>,Array<String>] :security_groups
|
54
|
+
# The list of security groups to associate with the instances.
|
55
|
+
# This may be an array of {EC2::SecurityGroup} objects, security
|
56
|
+
# group names or security group ids.
|
57
|
+
#
|
58
|
+
# @option options [String] :user_data The user data available to
|
59
|
+
# the launched Amazon EC2 instances.
|
60
|
+
#
|
61
|
+
# @return [LaunchConfiguration]
|
62
|
+
#
|
63
|
+
def create name, image, instance_type, options = {}
|
64
|
+
|
65
|
+
client_opts = {}
|
66
|
+
client_opts[:launch_configuration_name] = name
|
67
|
+
client_opts[:image_id] = image_id_opt(image)
|
68
|
+
client_opts[:instance_type] = instance_type
|
69
|
+
client_opts[:block_device_mappings] = options[:block_device_mappings] if
|
70
|
+
options.key?(:block_device_mappings)
|
71
|
+
client_opts[:instance_monitoring] = instance_monitoring_opt(options) if
|
72
|
+
options.key?(:detailed_instance_monitoring)
|
73
|
+
client_opts[:kernel_id] = options[:kernel_id] if options[:kernel_id]
|
74
|
+
client_opts[:key_name] = key_name_opt(options) if options[:key_pair]
|
75
|
+
client_opts[:ramdisk_id] = options[:ramdisk_id] if options[:ramdisk_id]
|
76
|
+
client_opts[:security_groups] = security_groups_opt(options) if
|
77
|
+
options.key?(:security_groups)
|
78
|
+
client_opts[:user_data] = user_data_opt(options) if options[:user_data]
|
79
|
+
|
80
|
+
client.create_launch_configuration(client_opts)
|
81
|
+
|
82
|
+
LaunchConfiguration.new(name,
|
83
|
+
:image_id => client_opts[:image_id],
|
84
|
+
:instance_type => client_opts[:instance_type],
|
85
|
+
:config => config)
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
# @param [String] name The name of a launch configuraiton.
|
90
|
+
# @return [LaunchConfiguration]
|
91
|
+
def [] name
|
92
|
+
LaunchConfiguration.new(name, :config => config)
|
93
|
+
end
|
94
|
+
|
95
|
+
protected
|
96
|
+
|
97
|
+
def _each_item next_token, limit, options = {}, &block
|
98
|
+
|
99
|
+
options[:next_token] = next_token if next_token
|
100
|
+
options[:max_records] = limit if limit
|
101
|
+
|
102
|
+
resp = client.describe_launch_configurations(options)
|
103
|
+
resp.launch_configurations.each do |details|
|
104
|
+
|
105
|
+
launch_configuration = LaunchConfiguration.new_from(
|
106
|
+
:describe_launch_configurations,
|
107
|
+
details,
|
108
|
+
details.launch_configuration_name,
|
109
|
+
:config => config)
|
110
|
+
|
111
|
+
yield(launch_configuration)
|
112
|
+
|
113
|
+
end
|
114
|
+
resp.next_token if resp.respond_to?(:next_token)
|
115
|
+
end
|
116
|
+
|
117
|
+
def image_id_opt image
|
118
|
+
image.is_a?(EC2::Image) ? image.image_id : image
|
119
|
+
end
|
120
|
+
|
121
|
+
def instance_monitoring_opt options
|
122
|
+
options[:detailed_instance_monitoring] == true ?
|
123
|
+
{ :enabled => true } :
|
124
|
+
{ :enabled => false }
|
125
|
+
end
|
126
|
+
|
127
|
+
def key_name_opt options
|
128
|
+
key_pair = options[:key_pair]
|
129
|
+
key_pair.is_a?(EC2::KeyPair) ? key_pair.name : key_pair
|
130
|
+
end
|
131
|
+
|
132
|
+
def security_groups_opt options
|
133
|
+
options[:security_groups].collect do |sg|
|
134
|
+
sg.is_a?(EC2::SecurityGroup) ? sg.id : sg
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def user_data_opt options
|
139
|
+
Base64.encode64(options[:user_data])
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
5
|
+
# the License is located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
12
|
+
# language governing permissions and limitations under the License.
|
13
|
+
|
14
|
+
module AWS
|
15
|
+
class AutoScaling
|
16
|
+
class NotificationConfiguration
|
17
|
+
|
18
|
+
# @private
|
19
|
+
def initialize auto_scaling_group, topic_arn, notification_types = []
|
20
|
+
@group = auto_scaling_group
|
21
|
+
@topic_arn = topic_arn
|
22
|
+
@notification_types = notification_types
|
23
|
+
end
|
24
|
+
|
25
|
+
# @return [Group]
|
26
|
+
attr_reader :group
|
27
|
+
|
28
|
+
alias_method :auto_scaling_group, :group
|
29
|
+
|
30
|
+
# @return [String]
|
31
|
+
attr_reader :topic_arn
|
32
|
+
|
33
|
+
# @return [Arra<String>]
|
34
|
+
attr_reader :notification_types
|
35
|
+
|
36
|
+
# @return [SNS::Topic]
|
37
|
+
def topic
|
38
|
+
SNS::Topic.new(topic_arn, :config => group.config)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Updates the notification configuration with a new list of types:
|
42
|
+
#
|
43
|
+
# config = auto_scaling_group.notification_configurations.first
|
44
|
+
# config.notification_types = %w(autoscaling:EC2_INSTANCE_LAUNCH)
|
45
|
+
#
|
46
|
+
# @return [nil]
|
47
|
+
#
|
48
|
+
def notification_types= *notification_types
|
49
|
+
|
50
|
+
client_opts = {}
|
51
|
+
client_opts[:topic_arn] = topic_arn
|
52
|
+
client_opts[:notification_types] = notification_types.flatten
|
53
|
+
client_opts[:auto_scaling_group_name] = group.name
|
54
|
+
|
55
|
+
group.client.put_notification_configuration(client_opts)
|
56
|
+
|
57
|
+
@notification_types = notification_types.flatten
|
58
|
+
|
59
|
+
nil
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
# Deletes this Auto Scaling notification configuration.
|
64
|
+
# @return [nil]
|
65
|
+
def delete
|
66
|
+
|
67
|
+
client_opts = {}
|
68
|
+
client_opts[:auto_scaling_group_name] = group.name
|
69
|
+
client_opts[:topic_arn] = topic_arn
|
70
|
+
|
71
|
+
group.client.delete_notification_configuration(client_opts)
|
72
|
+
|
73
|
+
nil
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
# @private
|
78
|
+
def eql? other
|
79
|
+
other.is_a?(NotificationConfiguration) and
|
80
|
+
other.group == group and
|
81
|
+
other.topic_arn == topic_arn and
|
82
|
+
other.notification_types == notification_types
|
83
|
+
end
|
84
|
+
|
85
|
+
alias_method :==, :eql?
|
86
|
+
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,184 @@
|
|
1
|
+
# Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
5
|
+
# the License is located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
12
|
+
# language governing permissions and limitations under the License.
|
13
|
+
|
14
|
+
module AWS
|
15
|
+
class AutoScaling
|
16
|
+
|
17
|
+
# Allows you to enumerate and create notification configurations.#
|
18
|
+
#
|
19
|
+
# == Enumerating Notification Configurations
|
20
|
+
#
|
21
|
+
# You can enumerated *ALL* configurations from the AWS::AutoScaling class.
|
22
|
+
#
|
23
|
+
# auto_scaling = AWS::AutoScaling.new
|
24
|
+
# auto_scaling.notification_configurations.each do |config|
|
25
|
+
# # ...
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
# You can also limit them to a single Auto Scaling group:
|
29
|
+
#
|
30
|
+
# group = auto_scaling.groups['group-name']
|
31
|
+
# group.notification_configurations.each do |config|
|
32
|
+
# # ...
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
# == Creating Notification Configurations
|
36
|
+
#
|
37
|
+
# You can create a notification configuration like so:
|
38
|
+
#
|
39
|
+
# auto_scaling.notification_configurations.create(
|
40
|
+
# :group => 'auto-scaling-group-name',
|
41
|
+
# :topic => 'sns-topic-arn')
|
42
|
+
#
|
43
|
+
# Just like with enumeration, you can create them from the Auto
|
44
|
+
# Scaling group:
|
45
|
+
#
|
46
|
+
# group.notification_configurations.create(:topic => 'sns-topic-arn')
|
47
|
+
#
|
48
|
+
class NotificationConfigurationCollection
|
49
|
+
|
50
|
+
include Core::Collection::Limitable
|
51
|
+
|
52
|
+
# @private
|
53
|
+
def initialize options = {}
|
54
|
+
@group = options[:group]
|
55
|
+
if @group
|
56
|
+
super(@group, options)
|
57
|
+
else
|
58
|
+
super(options)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# @return [Group,nil] If this collection was initialized with
|
63
|
+
# an Auto Scaling group, then that group is returned, nil otherwise.
|
64
|
+
attr_reader :group
|
65
|
+
|
66
|
+
alias_method :auto_scaling_group, :group
|
67
|
+
|
68
|
+
# Creates a new notification configuration. To create a notification
|
69
|
+
# configuration you need an {SNS::Topic} and an Auto Scaling {Group}.
|
70
|
+
#
|
71
|
+
# auto_scaling.notification_configurations.create(
|
72
|
+
# :group => 'auto-scaling-group-name',
|
73
|
+
# :topic => 'sns-topic-arn')
|
74
|
+
#
|
75
|
+
# You can also create notification configurations from an Auto Scaling
|
76
|
+
# group and omit the +:group+ option.
|
77
|
+
#
|
78
|
+
# auto_scaling_group.notification_configurations.create(
|
79
|
+
# :topic => 'sns-topic-arn')
|
80
|
+
#
|
81
|
+
# You may also pass a list of notification types to publish to the
|
82
|
+
# topic. If you omit this option, then all notification types
|
83
|
+
# will be configured.
|
84
|
+
#
|
85
|
+
# # publish only these two specific notification types
|
86
|
+
# auto_scaling_group.notification_configurations.create(
|
87
|
+
# :topic => 'sns-topic-arn',
|
88
|
+
# :types => [
|
89
|
+
# 'autoscaling:EC2_INSTANCE_LAUNCH',
|
90
|
+
# 'autoscaling:EC2_INSTANCE_TERMINATE',
|
91
|
+
# ]
|
92
|
+
# )
|
93
|
+
#
|
94
|
+
# @param [Hash] options
|
95
|
+
#
|
96
|
+
# @option options [required,SNS::Topic,String] :topic An {SNS::Topic}
|
97
|
+
# object or a topic arn string. Notifications will be published
|
98
|
+
# to this topic.
|
99
|
+
#
|
100
|
+
# @option options [Group,String] :group An Auto Scaling {Group} object
|
101
|
+
# or the name of an Auto Scaling group. This is required if you
|
102
|
+
# this collection is not scoped by a {Group}.
|
103
|
+
#
|
104
|
+
# @option options [Array<String>] :types A list of notification
|
105
|
+
# types that should publish messages to the given topic.
|
106
|
+
#
|
107
|
+
# @return [NotificationConfiguration]
|
108
|
+
#
|
109
|
+
def create options = {}
|
110
|
+
|
111
|
+
topic_arn = options[:topic].is_a?(SNS::Topic) ?
|
112
|
+
options[:topic].arn : options[:topic]
|
113
|
+
|
114
|
+
unless group = @group
|
115
|
+
if group = options[:group]
|
116
|
+
group = Group.new(group) unless group.is_a?(Group)
|
117
|
+
else
|
118
|
+
raise ArgumentError, 'missing required :group option'
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
unless types = options[:types]
|
123
|
+
types = AutoScaling.new(:config => config).notification_types
|
124
|
+
end
|
125
|
+
|
126
|
+
notification_config = NotificationConfiguration.new(group, topic_arn)
|
127
|
+
notification_config.notification_types = types
|
128
|
+
notification_config
|
129
|
+
|
130
|
+
end
|
131
|
+
alias_method :put, :create
|
132
|
+
|
133
|
+
# @yeild [notification_config]
|
134
|
+
# @yield_param [NotificationConfiguration] notification_config
|
135
|
+
def each &block
|
136
|
+
|
137
|
+
#
|
138
|
+
# <grumble> We can't use the standard pageable collection mixin here.
|
139
|
+
# When you provide :max_records it returns each notification
|
140
|
+
# type as an individual record, instead of notification configurations
|
141
|
+
# with grouped types. This makes it very possible to
|
142
|
+
# get a part of a configuration in one page of results with the
|
143
|
+
# rest in the next page.
|
144
|
+
#
|
145
|
+
# So instead we will request and group them all before yielding.
|
146
|
+
#
|
147
|
+
|
148
|
+
next_token = nil
|
149
|
+
|
150
|
+
groups = {}
|
151
|
+
|
152
|
+
begin
|
153
|
+
|
154
|
+
client_opts = {}
|
155
|
+
client_opts[:next_token] = next_token if next_token
|
156
|
+
client_opts[:auto_scaling_group_names] = [@group.name] if @group
|
157
|
+
|
158
|
+
resp = client.describe_notification_configurations(client_opts)
|
159
|
+
resp.notification_configurations.each do |c|
|
160
|
+
group_name = c.auto_scaling_group_name
|
161
|
+
groups[group_name] ||= {}
|
162
|
+
groups[group_name][c.topic_arn] ||= []
|
163
|
+
groups[group_name][c.topic_arn] << c.notification_type
|
164
|
+
end
|
165
|
+
|
166
|
+
next_token = resp.respond_to?(:next_token) ? resp.next_token : nil
|
167
|
+
|
168
|
+
end while next_token
|
169
|
+
|
170
|
+
groups.each_pair do |group_name, topics|
|
171
|
+
topics.each_pair do |topic_arn, types|
|
172
|
+
|
173
|
+
notification_config = NotificationConfiguration.new(
|
174
|
+
Group.new(group_name, :config => config), topic_arn, types)
|
175
|
+
|
176
|
+
yield(notification_config)
|
177
|
+
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
5
|
+
# the License is located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
12
|
+
# language governing permissions and limitations under the License.
|
13
|
+
|
14
|
+
module AWS
|
15
|
+
class AutoScaling
|
16
|
+
|
17
|
+
# @private
|
18
|
+
class Request < Core::Http::Request
|
19
|
+
include Core::AuthorizeV2
|
20
|
+
include Core::AuthorizeWithSessionToken
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
# Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
5
|
+
# the License is located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
12
|
+
# language governing permissions and limitations under the License.
|
13
|
+
|
14
|
+
module AWS
|
15
|
+
class AutoScaling
|
16
|
+
class ScalingPolicy < Core::Resource
|
17
|
+
|
18
|
+
include ScalingPolicyOptions
|
19
|
+
|
20
|
+
# @private
|
21
|
+
def initialize auto_scaling_group, policy_name, options = {}
|
22
|
+
@group = auto_scaling_group
|
23
|
+
@name = policy_name
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [Group]
|
28
|
+
attr_reader :group
|
29
|
+
|
30
|
+
alias_method :auto_scaling_group, :group
|
31
|
+
|
32
|
+
# @return [String]
|
33
|
+
attr_reader :name
|
34
|
+
|
35
|
+
attribute :arn, :as => :policy_arn, :static => true
|
36
|
+
|
37
|
+
attribute :adjustment_type
|
38
|
+
|
39
|
+
attribute :scaling_adjustment
|
40
|
+
|
41
|
+
attribute :alarms do
|
42
|
+
translates_output do |alarms|
|
43
|
+
alarms.inject({}) do |hash,alarm|
|
44
|
+
hash.merge(alarm.alarm_name => alarm.alarm_arn)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
attribute :cooldown
|
50
|
+
|
51
|
+
populates_from(:describe_policies) do |resp|
|
52
|
+
resp.scaling_policies.find do |p|
|
53
|
+
p.policy_name == name and
|
54
|
+
p.auto_scaling_group_name == group.name
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Updates this scaling policy.
|
59
|
+
# @param (see ScalingPolicyOptions#scaling_policy_options)
|
60
|
+
# @option (see ScalingPolicyOptions#scaling_policy_options)
|
61
|
+
# @return [nil]
|
62
|
+
def update options = {}
|
63
|
+
client_opts = scaling_policy_options(group, name, options)
|
64
|
+
resp = client.put_scaling_policy(client_opts)
|
65
|
+
static_attributes[:arn] = resp.policy_arn
|
66
|
+
nil
|
67
|
+
end
|
68
|
+
alias_method :put, :update
|
69
|
+
|
70
|
+
# Runs this policy against it's Auto Scaling group.
|
71
|
+
#
|
72
|
+
# @param [Hash] options
|
73
|
+
#
|
74
|
+
# @option options [Boolean] :honor_cooldown (false) Set to true if you
|
75
|
+
# want Auto Scaling to reject this request when the Auto Scaling
|
76
|
+
# group is in cooldown.
|
77
|
+
#
|
78
|
+
# @raise [Errors::ScalingActivityInProgress]
|
79
|
+
#
|
80
|
+
# @return [nil]
|
81
|
+
#
|
82
|
+
def execute options = {}
|
83
|
+
client_opts = {}
|
84
|
+
client_opts[:auto_scaling_group_name] = group.name
|
85
|
+
client_opts[:policy_name] = name
|
86
|
+
client_opts[:honor_cooldown] = options[:honor_cooldown] == true
|
87
|
+
client.execute_policy(client_opts)
|
88
|
+
nil
|
89
|
+
end
|
90
|
+
|
91
|
+
# Deletes this scaling policy.
|
92
|
+
# @return [nil]
|
93
|
+
def delete
|
94
|
+
client_opts = {}
|
95
|
+
client_opts[:auto_scaling_group_name] = group.name
|
96
|
+
client_opts[:policy_name] = name
|
97
|
+
client.delete_policy(client_opts)
|
98
|
+
nil
|
99
|
+
end
|
100
|
+
|
101
|
+
# @return [Boolean] Returns true if the policy exists.
|
102
|
+
def exists?
|
103
|
+
client_opts = {}
|
104
|
+
client_opts[:auto_scaling_group_name] = group.name
|
105
|
+
client_opts[:policy_names] = [name]
|
106
|
+
resp = client.describe_policies(client_opts)
|
107
|
+
!resp.scaling_policies.empty?
|
108
|
+
end
|
109
|
+
|
110
|
+
protected
|
111
|
+
|
112
|
+
def get_resource attr_name = nil
|
113
|
+
client_opts = {}
|
114
|
+
client_opts[:auto_scaling_group_name] = group.name
|
115
|
+
client_opts[:policy_names] = [name]
|
116
|
+
client.describe_policies(client_opts)
|
117
|
+
end
|
118
|
+
|
119
|
+
def resource_identifiers
|
120
|
+
[[:group, group], [:name, name]]
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|