aws-sdk 1.3.8 → 1.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,146 @@
|
|
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
|
+
# This mixin provides a method for parsing Auto Scaling group options
|
18
|
+
# (for create and upate methods).
|
19
|
+
# @private
|
20
|
+
module GroupOptions
|
21
|
+
|
22
|
+
protected
|
23
|
+
|
24
|
+
# @param [Hash] options
|
25
|
+
#
|
26
|
+
# @option options [required,Integer] :min_size
|
27
|
+
# The maximum size of the Auto Scaling group.
|
28
|
+
#
|
29
|
+
# @option options [required,Integer] :max_size
|
30
|
+
# The minimum size of the Auto Scaling group.
|
31
|
+
#
|
32
|
+
# @option options [required,LaunchConfiguration,String] :launch_configuration
|
33
|
+
# The launch configuration to use with the Auto Scaling group.
|
34
|
+
# This may be a {LaunchConfiguration} object or a launch configuration
|
35
|
+
# name string.
|
36
|
+
#
|
37
|
+
# @option options [required,Array<String>] :availability_zones
|
38
|
+
# A list of Availability Zones for the Auto Scaling group.
|
39
|
+
# This can be {EC2::AvailabilityZone} objects or availability
|
40
|
+
# zone names.
|
41
|
+
#
|
42
|
+
# @option options [Integer] :default_cooldown
|
43
|
+
# The amount of time, in seconds, after a scaling activity completes
|
44
|
+
# before any further trigger-related scaling activities can start.
|
45
|
+
#
|
46
|
+
# @option options [Integer] :desired_capacity
|
47
|
+
# The number of Amazon EC2 instances that should be running in
|
48
|
+
# the group.
|
49
|
+
#
|
50
|
+
# @option options [Integer] :health_check_grace_period
|
51
|
+
# Length of time in seconds after a new Amazon EC2 instance comes
|
52
|
+
# into service that Auto Scaling starts checking its health.
|
53
|
+
#
|
54
|
+
# @option options [Symbol] :health_check_type
|
55
|
+
# The service you want the health status from,
|
56
|
+
# Amazon EC2 or Elastic Load Balancer. Valid values are
|
57
|
+
# +:ec2+ or +:elb+.
|
58
|
+
#
|
59
|
+
# @option options [String] :placement_group
|
60
|
+
# Physical location of your cluster placement group created in
|
61
|
+
# Amazon EC2. For more information about cluster placement group, see
|
62
|
+
# {Using Cluster Instances}[http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/using_cluster_computing.html].
|
63
|
+
#
|
64
|
+
# @option options [Array<Hash>] :tags A list of tags to apply launched
|
65
|
+
# instances. Each tag hash may have the following keys:
|
66
|
+
#
|
67
|
+
# * +:key+ - (required,String) The tag name.
|
68
|
+
# * +:value+ - (String) The optional tag value.
|
69
|
+
# * +:propagate_at_launch+ - (Boolean) Whether or not to propagate
|
70
|
+
# to instances, defaults to true.
|
71
|
+
#
|
72
|
+
# @option options [Array<EC2::Subnet>,Array<String>] :subnets
|
73
|
+
# A list of subnet identifiers of Amazon Virtual Private Clouds
|
74
|
+
# (Amazon VPCs). Ensure the subnets' Availability Zones match the
|
75
|
+
# Availability Zones specified.
|
76
|
+
#
|
77
|
+
# @return [Hash]
|
78
|
+
#
|
79
|
+
def group_options options
|
80
|
+
|
81
|
+
group_opts = {}
|
82
|
+
|
83
|
+
group_opts[:launch_configuration_name] = launch_config_opt(options) if
|
84
|
+
options.key?(:launch_configuration)
|
85
|
+
|
86
|
+
group_opts[:availability_zones] = az_opt(options) if
|
87
|
+
options.key?(:availability_zones)
|
88
|
+
|
89
|
+
group_opts[:vpc_zone_identifier] = subnets_opt(options) if
|
90
|
+
options.key?(:subnets)
|
91
|
+
|
92
|
+
group_opts[:health_check_type] = health_check_type_opt(options) if
|
93
|
+
options.key?(:health_check_type)
|
94
|
+
|
95
|
+
group_opts[:tags] = tags_opt(options) if
|
96
|
+
options.key?(:tags)
|
97
|
+
|
98
|
+
[
|
99
|
+
:min_size,
|
100
|
+
:max_size,
|
101
|
+
:default_cooldown,
|
102
|
+
:desired_capacity,
|
103
|
+
:health_check_grace_period,
|
104
|
+
:placement_group,
|
105
|
+
].each do |opt|
|
106
|
+
group_opts[opt] = options[opt] if options.key?(opt)
|
107
|
+
end
|
108
|
+
|
109
|
+
group_opts
|
110
|
+
end
|
111
|
+
|
112
|
+
def launch_config_opt options
|
113
|
+
lc = options[:launch_configuration]
|
114
|
+
lc.is_a?(LaunchConfiguration) ? lc.name : lc
|
115
|
+
end
|
116
|
+
|
117
|
+
def az_opt options
|
118
|
+
zones = options[:availability_zones]
|
119
|
+
zones.map {|zone| zone.is_a?(EC2::AvailabilityZone) ? zone.name : zone }
|
120
|
+
end
|
121
|
+
|
122
|
+
def load_balancers_opt options
|
123
|
+
options[:load_balancers].collect do |lb|
|
124
|
+
lb.is_a?(ELB::LoadBalancer) ? lb.name : lb
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def subnets_opt options
|
129
|
+
options[:subnets].collect do |subnet|
|
130
|
+
subnet.is_a?(EC2::Subnet) ? subnet.id : subnet
|
131
|
+
end.join(',')
|
132
|
+
end
|
133
|
+
|
134
|
+
def health_check_type_opt options
|
135
|
+
options[:health_check_type].to_s.upcase
|
136
|
+
end
|
137
|
+
|
138
|
+
def tags_opt options
|
139
|
+
options[:tags].map(&:to_hash).each do |tag|
|
140
|
+
tag[:propagate_at_launch] = true unless tag.key?(:propagate_at_launch)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
@@ -0,0 +1,192 @@
|
|
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
|
+
# A small wrapper around an {EC2::Instance}.
|
18
|
+
#
|
19
|
+
# == Getting Auto Scaling Instances
|
20
|
+
#
|
21
|
+
# If you know the EC2 instance id, you can use {#[]} to get the
|
22
|
+
# Auto Scaling instance.
|
23
|
+
#
|
24
|
+
# instance = auto_scaling.instance['i-1234578']
|
25
|
+
# instance.health_statue #=> :healthy
|
26
|
+
# instance.ec2_instance #=> <AWS::EC2::Instance instance_id:i-1234578>
|
27
|
+
#
|
28
|
+
# == Enumerating Auto Scaling Instances
|
29
|
+
#
|
30
|
+
# You can enumerate *ALL* instances like so:
|
31
|
+
#
|
32
|
+
# auto_scaling = AWS::AutoScaling.new
|
33
|
+
# auto_scaling.instances.each do |auto_scaling_instance|
|
34
|
+
# # ...
|
35
|
+
# end
|
36
|
+
#
|
37
|
+
# If you want the instances for a single auto scaling group:
|
38
|
+
#
|
39
|
+
# group = auto_scaling.groups['group-name']
|
40
|
+
# group.auto_scaling_instances.each do |instance|
|
41
|
+
# # ...
|
42
|
+
# end
|
43
|
+
#
|
44
|
+
# If you prefer {EC2::Instance} objects you should use
|
45
|
+
# {Group#ec2_instances} instead.
|
46
|
+
#
|
47
|
+
# @attr_reader [String] auto_scaling_group_name
|
48
|
+
#
|
49
|
+
# @attr_reader [String] launch_configuration_name
|
50
|
+
#
|
51
|
+
# @attr_reader [String] health_status Returns the instance health status
|
52
|
+
# (e.g. 'Healthly' or 'Unhealthly').
|
53
|
+
#
|
54
|
+
# @attr_reader [String] availability_zone_name
|
55
|
+
#
|
56
|
+
# @attr_reader [String] lifecycle_state
|
57
|
+
#
|
58
|
+
class Instance < Core::Resource
|
59
|
+
|
60
|
+
# @private
|
61
|
+
def initialize instance_id, options = {}
|
62
|
+
@instance_id = instance_id
|
63
|
+
super
|
64
|
+
end
|
65
|
+
|
66
|
+
# @return [String] instance_id Returns the EC2 id instance.
|
67
|
+
attr_reader :instance_id
|
68
|
+
|
69
|
+
alias_method :id, :instance_id
|
70
|
+
|
71
|
+
attribute :auto_scaling_group_name, :static => true
|
72
|
+
|
73
|
+
attribute :availability_zone_name,
|
74
|
+
:as => :availability_zone,
|
75
|
+
:static => true
|
76
|
+
|
77
|
+
attribute :health_status
|
78
|
+
|
79
|
+
attribute :launch_configuration_name, :static => true
|
80
|
+
|
81
|
+
attribute :lifecycle_state
|
82
|
+
|
83
|
+
populates_from(:describe_auto_scaling_instances) do |resp|
|
84
|
+
resp.auto_scaling_instances.find do |i|
|
85
|
+
i.instance_id == instance_id
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# describe auto scaling groups returns ALL attributes
|
90
|
+
# except :auto_scaling_group_name
|
91
|
+
provider(:describe_auto_scaling_groups) do |provider|
|
92
|
+
provider.find do |resp|
|
93
|
+
instance = nil
|
94
|
+
resp.auto_scaling_groups.each do |group|
|
95
|
+
group.instances.each do |i|
|
96
|
+
instance = i if i.instance_id == instance_id
|
97
|
+
end
|
98
|
+
end
|
99
|
+
instance
|
100
|
+
end
|
101
|
+
provider.provides(*(attributes.keys - [:auto_scaling_group_name]))
|
102
|
+
end
|
103
|
+
|
104
|
+
# @return [EC2::Instance]
|
105
|
+
def ec2_instance
|
106
|
+
EC2::Instance.new(instance_id, :config => config)
|
107
|
+
end
|
108
|
+
|
109
|
+
# @return [AutoScaling::Group]
|
110
|
+
def auto_scaling_group
|
111
|
+
Group.new(auto_scaling_group_name, :config => config)
|
112
|
+
end
|
113
|
+
alias_method :group, :auto_scaling_group
|
114
|
+
|
115
|
+
# @return [EC2::AvailabilityZone]
|
116
|
+
def availability_zone
|
117
|
+
EC2::AvailabilityZone.new(availability_zone_name, :config => config)
|
118
|
+
end
|
119
|
+
|
120
|
+
# @return [LaunchConfiguration]
|
121
|
+
def launch_configuration
|
122
|
+
LaunchConfiguration.new(launch_configuration_name, :config => config)
|
123
|
+
end
|
124
|
+
|
125
|
+
# @param [String] status Sets the health status of an instance.
|
126
|
+
# Valid values inculde 'Healthy' and 'Unhealthy'
|
127
|
+
#
|
128
|
+
# @param [Hash] options
|
129
|
+
#
|
130
|
+
# @option options [Boolean] :respect_grace_period (false) If true,
|
131
|
+
# this call should respect the grace period associated with
|
132
|
+
# this instance's Auto Scaling group.
|
133
|
+
#
|
134
|
+
# @return [nil]
|
135
|
+
#
|
136
|
+
def set_health status, options = {}
|
137
|
+
client_opts = {}
|
138
|
+
client_opts[:instance_id] = instance_id
|
139
|
+
client_opts[:health_status] = status
|
140
|
+
client_opts[:should_respect_grace_period] =
|
141
|
+
options[:respect_grace_period] == true
|
142
|
+
client.set_instance_health(client_opts)
|
143
|
+
end
|
144
|
+
|
145
|
+
# @return [Boolean] Returns true if there exists an Auto Scaling
|
146
|
+
# instance with this instance id.
|
147
|
+
def exists?
|
148
|
+
!get_resource.auto_scaling_instances.empty?
|
149
|
+
end
|
150
|
+
|
151
|
+
# Terminates the current Auto Scaling instance.
|
152
|
+
#
|
153
|
+
# @params [Boolean] decrement_desired_capacity Specifies whether or not
|
154
|
+
# terminating this instance should also decrement the size of
|
155
|
+
# the AutoScalingGroup.
|
156
|
+
#
|
157
|
+
# @return [Activity] Returns an activity that represents the
|
158
|
+
# termination of the instance.
|
159
|
+
#
|
160
|
+
def terminate decrement_desired_capacity
|
161
|
+
|
162
|
+
client_opts = {}
|
163
|
+
client_opts[:instance_id] = instance_id
|
164
|
+
client_opts[:should_decrement_desired_capacity] =
|
165
|
+
decrement_desired_capacity
|
166
|
+
|
167
|
+
resp = client.terminate_instance_in_auto_scaling_group(client_opts)
|
168
|
+
|
169
|
+
Activity.new_from(
|
170
|
+
:terminate_instance_in_auto_scaling_group,
|
171
|
+
resp.activity,
|
172
|
+
resp.activity.activity_id,
|
173
|
+
:config => config)
|
174
|
+
|
175
|
+
end
|
176
|
+
alias_method :delete, :terminate
|
177
|
+
|
178
|
+
protected
|
179
|
+
|
180
|
+
def resource_identifiers
|
181
|
+
[[:instance_id, instance_id]]
|
182
|
+
end
|
183
|
+
|
184
|
+
def get_resource attr_name = nil
|
185
|
+
client_opts = {}
|
186
|
+
client_opts[:instance_ids] = [instance_id]
|
187
|
+
client.describe_auto_scaling_instances(client_opts)
|
188
|
+
end
|
189
|
+
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
@@ -0,0 +1,63 @@
|
|
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 Auto Scaling instances.
|
18
|
+
#
|
19
|
+
# auto_scaling = AWS::AutoScaling.new
|
20
|
+
# auto_scaling.instances.each do |instance|
|
21
|
+
# # ...
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
# You can also get an Auto Scaling instance by its EC2 instance id.
|
25
|
+
#
|
26
|
+
# auto_scaling_instance = auto_scaling.instances['i-12345678']
|
27
|
+
# auto_scaling_instance.class #=> AWS::AutoScaling::Instance
|
28
|
+
#
|
29
|
+
class InstanceCollection
|
30
|
+
|
31
|
+
include Core::Collection::Limitable
|
32
|
+
|
33
|
+
# @param [String] instance_id An {EC2::Instance} id string.
|
34
|
+
# @return [AutoScaling::Instance]
|
35
|
+
def [] instance_id
|
36
|
+
Instance.new(instance_id, :config => config)
|
37
|
+
end
|
38
|
+
|
39
|
+
protected
|
40
|
+
|
41
|
+
def _each_item next_token, limit, options = {}, &block
|
42
|
+
|
43
|
+
options[:next_token] = next_token if next_token
|
44
|
+
options[:max_records] = limit if limit
|
45
|
+
|
46
|
+
resp = client.describe_auto_scaling_instances(options)
|
47
|
+
resp.auto_scaling_instances.each do |details|
|
48
|
+
|
49
|
+
instance = Instance.new_from(
|
50
|
+
:describe_auto_scaling_instances,
|
51
|
+
details,
|
52
|
+
details.instance_id,
|
53
|
+
:config => config)
|
54
|
+
|
55
|
+
yield(instance)
|
56
|
+
|
57
|
+
end
|
58
|
+
resp.next_token if resp.respond_to?(:next_token)
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,150 @@
|
|
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
|
+
|
19
|
+
# @attr_reader [String] name
|
20
|
+
#
|
21
|
+
# @attr_reader [Time] created_time
|
22
|
+
#
|
23
|
+
# @attr_reader [String] image_id
|
24
|
+
#
|
25
|
+
# @attr_reader [Boolean] detailed_instance_monitoring
|
26
|
+
#
|
27
|
+
# @attr_reader [String] instance_type
|
28
|
+
#
|
29
|
+
# @attr_reader [String,nil] kernel_id
|
30
|
+
#
|
31
|
+
# @attr_reader [String,nil] key_name
|
32
|
+
#
|
33
|
+
# @attr_reader [String] arn
|
34
|
+
#
|
35
|
+
# @attr_reader [String,nil] ramdisk_id
|
36
|
+
#
|
37
|
+
# @attr_reader [String,nil] user_data
|
38
|
+
#
|
39
|
+
# @attr_reader [Array<Hash>] block_device_mappings
|
40
|
+
#
|
41
|
+
class LaunchConfiguration < Core::Resource
|
42
|
+
|
43
|
+
# @private
|
44
|
+
def initialize name, options = {}
|
45
|
+
super(options.merge(:name => name))
|
46
|
+
end
|
47
|
+
|
48
|
+
attribute :name, :as => :launch_configuration_name, :static => true
|
49
|
+
|
50
|
+
attribute :created_time, :static => true
|
51
|
+
|
52
|
+
alias_method :created_at, :created_time
|
53
|
+
|
54
|
+
attribute :image_id, :static => true
|
55
|
+
|
56
|
+
attribute :detailed_instance_monitoring,
|
57
|
+
:as => :instance_monitoring,
|
58
|
+
:static => true do
|
59
|
+
translates_output {|value| value.enabled? }
|
60
|
+
end
|
61
|
+
|
62
|
+
alias_method :detailed_instance_monitoring?, :detailed_instance_monitoring
|
63
|
+
|
64
|
+
attribute :instance_type, :static => true
|
65
|
+
|
66
|
+
attribute :kernel_id, :static => true
|
67
|
+
|
68
|
+
attribute :key_name, :static => true
|
69
|
+
|
70
|
+
attribute :arn, :as => :launch_configuration_arn, :static => true
|
71
|
+
|
72
|
+
attribute :ramdisk_id, :static => true
|
73
|
+
|
74
|
+
attribute :user_data, :static => true do
|
75
|
+
translates_output{|v| Base64.decode64(v) }
|
76
|
+
end
|
77
|
+
|
78
|
+
attribute :block_device_mappings,
|
79
|
+
:static => true do
|
80
|
+
translates_output{|mappings| mappings.map(&:to_hash) }
|
81
|
+
end
|
82
|
+
|
83
|
+
attribute :security_group_details,
|
84
|
+
:as => :security_groups,
|
85
|
+
:static => true
|
86
|
+
|
87
|
+
protected :security_group_details
|
88
|
+
|
89
|
+
populates_from(:describe_launch_configurations) do |resp|
|
90
|
+
resp.launch_configurations.find do |lc|
|
91
|
+
lc.launch_configuration_name == name
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
# @return [EC2::Image]
|
96
|
+
def image
|
97
|
+
EC2::Image.new(image_id, :config => config)
|
98
|
+
end
|
99
|
+
|
100
|
+
# @return [KeyPair,nil]
|
101
|
+
def key_pair
|
102
|
+
if key_name
|
103
|
+
EC2::KeyPair.new(key_name, :config => config)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
# @return [Array<EC2::SecurityGroup>]
|
108
|
+
def security_groups
|
109
|
+
names_or_ids = security_group_details
|
110
|
+
if names_or_ids.all?{|str| str.match(/^sg-[0-9a-f]{8}$/) }
|
111
|
+
names_or_ids.collect do |security_group_id|
|
112
|
+
EC2::SecurityGroup.new(security_group_id, :config => config)
|
113
|
+
end
|
114
|
+
else
|
115
|
+
begin
|
116
|
+
ec2 = EC2.new(:config => config)
|
117
|
+
ec2.security_groups.filter('group-name', *names_or_ids).to_a
|
118
|
+
rescue
|
119
|
+
names_or_ids
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
# @return [Boolean] Returns true if this launch configuration exists.
|
125
|
+
def exists?
|
126
|
+
!!get_resource.launch_configurations.first
|
127
|
+
end
|
128
|
+
|
129
|
+
# Deletes the current launch configuration.
|
130
|
+
# @return [nil]
|
131
|
+
def delete
|
132
|
+
client.delete_launch_configuration(resource_options)
|
133
|
+
nil
|
134
|
+
end
|
135
|
+
|
136
|
+
protected
|
137
|
+
|
138
|
+
def resource_identifiers
|
139
|
+
[[:launch_configuration_name, name]]
|
140
|
+
end
|
141
|
+
|
142
|
+
def get_resource attr_name = nil
|
143
|
+
client_opts = {}
|
144
|
+
client_opts[:launch_configuration_names] = [name]
|
145
|
+
client.describe_launch_configurations(client_opts)
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|