right_aws 2.1.0 → 3.0.0
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/History.txt +38 -14
- data/Manifest.txt +1 -0
- data/Rakefile +34 -8
- data/lib/awsbase/right_awsbase.rb +176 -12
- data/lib/awsbase/version.rb +2 -2
- data/lib/ec2/right_ec2.rb +120 -37
- data/lib/ec2/right_ec2_ebs.rb +57 -41
- data/lib/ec2/right_ec2_images.rb +73 -44
- data/lib/ec2/right_ec2_instances.rb +158 -155
- data/lib/ec2/right_ec2_reserved_instances.rb +36 -26
- data/lib/ec2/right_ec2_security_groups.rb +261 -166
- data/lib/ec2/right_ec2_spot_instances.rb +72 -75
- data/lib/ec2/right_ec2_vpc.rb +15 -8
- data/lib/ec2/right_ec2_vpc2.rb +381 -0
- data/lib/elb/right_elb_interface.rb +3 -1
- data/lib/emr/right_emr_interface.rb +727 -0
- data/lib/rds/right_rds_interface.rb +102 -27
- data/lib/right_aws.rb +4 -1
- data/lib/route_53/right_route_53_interface.rb +24 -14
- data/lib/s3/right_s3.rb +16 -15
- data/lib/s3/right_s3_interface.rb +42 -10
- data/lib/sdb/right_sdb_interface.rb +14 -5
- data/lib/sns/right_sns_interface.rb +286 -0
- data/test/README.mdown +39 -0
- data/test/awsbase/test_right_awsbase.rb +0 -1
- data/test/ec2/test_right_ec2.rb +0 -1
- data/test/elb/test_helper.rb +2 -0
- data/test/elb/test_right_elb.rb +43 -0
- data/test/route_53/fixtures/a_record.xml +18 -0
- data/test/route_53/fixtures/alias_record.xml +18 -0
- data/test/route_53/test_helper.rb +2 -0
- data/test/route_53/test_right_route_53.rb +141 -0
- data/test/s3/test_right_s3.rb +97 -39
- data/test/sns/test_helper.rb +2 -0
- data/test/sns/test_right_sns.rb +153 -0
- data/test/ts_right_aws.rb +1 -0
- metadata +28 -9
@@ -38,7 +38,8 @@ module RightAws
|
|
38
38
|
instance[:aws_reason] = instance[:aws_reason].sub(/\(\d[^)]*GMT\) */, '')
|
39
39
|
instance[:aws_owner] = reservation[:aws_owner]
|
40
40
|
instance[:aws_reservation_id] = reservation[:aws_reservation_id]
|
41
|
-
|
41
|
+
# Security Groups
|
42
|
+
instance[:groups] = instance[:groups].right_blank? ? reservation[:aws_groups] : instance[:groups]
|
42
43
|
result << instance
|
43
44
|
end
|
44
45
|
end
|
@@ -61,38 +62,45 @@ module RightAws
|
|
61
62
|
#
|
62
63
|
#
|
63
64
|
# ec2.describe_instances #=>
|
64
|
-
# [{:
|
65
|
-
#
|
66
|
-
#
|
67
|
-
#
|
68
|
-
#
|
69
|
-
#
|
70
|
-
#
|
71
|
-
#
|
72
|
-
#
|
73
|
-
#
|
74
|
-
#
|
75
|
-
#
|
76
|
-
#
|
77
|
-
#
|
78
|
-
#
|
79
|
-
#
|
80
|
-
#
|
81
|
-
#
|
82
|
-
#
|
83
|
-
#
|
84
|
-
#
|
85
|
-
#
|
86
|
-
#
|
87
|
-
#
|
88
|
-
#
|
89
|
-
#
|
90
|
-
#
|
91
|
-
#
|
92
|
-
#
|
93
|
-
#
|
94
|
-
#
|
95
|
-
#
|
65
|
+
# [{:source_dest_check=>true,
|
66
|
+
# :subnet_id=>"subnet-da6cf9b3",
|
67
|
+
# :aws_kernel_id=>"aki-3932d150",
|
68
|
+
# :ami_launch_index=>"0",
|
69
|
+
# :tags=>{},
|
70
|
+
# :aws_reservation_id=>"r-7cd25c11",
|
71
|
+
# :aws_owner=>"826693181925",
|
72
|
+
# :state_reason_code=>"Client.UserInitiatedShutdown",
|
73
|
+
# :aws_instance_id=>"i-2d898e41",
|
74
|
+
# :hypervisor=>"xen",
|
75
|
+
# :root_device_name=>"/dev/sda1",
|
76
|
+
# :aws_ramdisk_id=>"ari-c515f6ac",
|
77
|
+
# :aws_instance_type=>"m1.large",
|
78
|
+
# :groups=>[{:group_name=>"2009-07-15-default", :group_id=>"sg-90c5d6fc"}],
|
79
|
+
# :block_device_mappings=>
|
80
|
+
# [{:device_name=>"/dev/sda1",
|
81
|
+
# :ebs_status=>"attached",
|
82
|
+
# :ebs_attach_time=>"2011-03-04T18:51:58.000Z",
|
83
|
+
# :ebs_delete_on_termination=>true,
|
84
|
+
# :ebs_volume_id=>"vol-38f2bd50"}],
|
85
|
+
# :state_reason_message=>
|
86
|
+
# "Client.UserInitiatedShutdown: User initiated shutdown",
|
87
|
+
# :aws_image_id=>"ami-a3638cca",
|
88
|
+
# :virtualization_type=>"paravirtual",
|
89
|
+
# :aws_launch_time=>"2011-03-04T18:13:59.000Z",
|
90
|
+
# :private_dns_name=>"",
|
91
|
+
# :aws_product_codes=>[],
|
92
|
+
# :aws_availability_zone=>"us-east-1a",
|
93
|
+
# :aws_state_code=>80,
|
94
|
+
# :architecture=>"x86_64",
|
95
|
+
# :dns_name=>"",
|
96
|
+
# :client_token=>"1299262447-684266-NNgyH-ouPTI-MzG6h-5AIRk",
|
97
|
+
# :root_device_type=>"ebs",
|
98
|
+
# :vpc_id=>"vpc-e16cf988",
|
99
|
+
# :monitoring_state=>"disabled",
|
100
|
+
# :ssh_key_name=>"default",
|
101
|
+
# :private_ip_address=>"192.168.0.52",
|
102
|
+
# :aws_reason=>"User initiated ",
|
103
|
+
# :aws_state=>"stopped"}, ...]
|
96
104
|
#
|
97
105
|
# ec2.describe_instances("i-8ce84ae6", "i-8ce84ae8", "i-8ce84ae0")
|
98
106
|
# ec2.describe_instances(:filters => { 'availability-zone' => 'us-east-1a', 'instance-type' => 'c1.medium' })
|
@@ -118,7 +126,7 @@ module RightAws
|
|
118
126
|
|
119
127
|
# Launch new EC2 instances. Returns a list of launched instances or an exception.
|
120
128
|
#
|
121
|
-
# ec2.run_instances('ami-e444444d',1,1,['
|
129
|
+
# ec2.run_instances('ami-e444444d',1,1,['2009-07-15-default'],'my_awesome_key', 'Woohoo!!!', 'public') #=>
|
122
130
|
# [{:aws_image_id => "ami-e444444d",
|
123
131
|
# :aws_reason => "",
|
124
132
|
# :aws_state_code => "0",
|
@@ -128,7 +136,7 @@ module RightAws
|
|
128
136
|
# :aws_state => "pending",
|
129
137
|
# :dns_name => "",
|
130
138
|
# :ssh_key_name => "my_awesome_key",
|
131
|
-
# :
|
139
|
+
# :groups => [{:group_name=>"2009-07-15-default", :group_id=>"sg-90c5d6fc"}],
|
132
140
|
# :private_dns_name => "",
|
133
141
|
# :aws_instance_type => "m1.small",
|
134
142
|
# :aws_launch_time => "2008-1-1T00:00:00.000Z"
|
@@ -138,7 +146,7 @@ module RightAws
|
|
138
146
|
# :aws_availability_zone => "us-east-1b"
|
139
147
|
# }]
|
140
148
|
#
|
141
|
-
def run_instances(image_id, min_count, max_count,
|
149
|
+
def run_instances(image_id, min_count, max_count, group_names, key_name, user_data='',
|
142
150
|
addressing_type = nil, instance_type = nil,
|
143
151
|
kernel_id = nil, ramdisk_id = nil, availability_zone = nil,
|
144
152
|
monitoring_enabled = nil, subnet_id = nil, disable_api_termination = nil,
|
@@ -147,7 +155,7 @@ module RightAws
|
|
147
155
|
launch_instances(image_id, { :min_count => min_count,
|
148
156
|
:max_count => max_count,
|
149
157
|
:user_data => user_data,
|
150
|
-
:
|
158
|
+
:group_names => group_names,
|
151
159
|
:key_name => key_name,
|
152
160
|
:instance_type => instance_type,
|
153
161
|
:addressing_type => addressing_type,
|
@@ -165,50 +173,74 @@ module RightAws
|
|
165
173
|
end
|
166
174
|
|
167
175
|
# Launch new EC2 instances.
|
176
|
+
#
|
168
177
|
# Options: :image_id, :addressing_type, :min_count, max_count, :key_name, :kernel_id, :ramdisk_id,
|
169
178
|
# :availability_zone, :monitoring_enabled, :subnet_id, :disable_api_termination, :instance_initiated_shutdown_behavior,
|
170
|
-
# :block_device_mappings, :placement_group_name, :license_pool
|
179
|
+
# :block_device_mappings, :placement_group_name, :license_pool, :group_ids, :group_names, :private_ip_address
|
171
180
|
#
|
172
181
|
# Returns a list of launched instances or an exception.
|
173
182
|
#
|
174
|
-
# ec2.launch_instances(
|
183
|
+
# ec2.launch_instances( "ami-78779511",
|
175
184
|
# :min_count => 1,
|
176
|
-
# :
|
185
|
+
# :group_names => ["default", "eugeg223123123"],
|
177
186
|
# :user_data => 'Ohoho!',
|
178
187
|
# :availability_zone => "us-east-1a",
|
179
|
-
# :disable_api_termination =>
|
188
|
+
# :disable_api_termination => false,
|
180
189
|
# :instance_initiated_shutdown_behavior => 'terminate',
|
181
|
-
# :block_device_mappings => [ {:ebs_snapshot_id=>"snap-
|
190
|
+
# :block_device_mappings => [ {:ebs_snapshot_id=>"snap-e40fd188",
|
182
191
|
# :ebs_delete_on_termination=>true,
|
183
192
|
# :device_name => "/dev/sdk",
|
184
193
|
# :virtual_name => "mystorage"} ] ) #=>
|
185
|
-
# [{:
|
186
|
-
# :dns_name=>"",
|
187
|
-
# :aws_instance_type=>"m1.small",
|
188
|
-
# :aws_owner=>"826693181925",
|
189
|
-
# :root_device_name=>"/dev/sda1",
|
190
|
-
# :instance_class=>"elastic",
|
191
|
-
# :state_reason_code=>0,
|
192
|
-
# :aws_state=>"pending",
|
194
|
+
# [{:hypervisor=>"xen",
|
193
195
|
# :private_dns_name=>"",
|
196
|
+
# :client_token=>"1309532374-551037-gcsBj-gEypk-piG06-ODfQm",
|
197
|
+
# :monitoring_state=>"disabled",
|
198
|
+
# :aws_availability_zone=>"us-east-1a",
|
199
|
+
# :root_device_name=>"/dev/sda1",
|
200
|
+
# :state_reason_code=>"pending",
|
201
|
+
# :dns_name=>"",
|
202
|
+
# :tags=>{},
|
194
203
|
# :aws_reason=>"",
|
195
|
-
# :
|
196
|
-
# :aws_reservation_id=>"r-54d38542",
|
204
|
+
# :virtualization_type=>"paravirtual",
|
197
205
|
# :state_reason_message=>"pending",
|
198
|
-
# :
|
206
|
+
# :aws_reservation_id=>"r-6fada703",
|
207
|
+
# :aws_ramdisk_id=>"ari-a51cf9cc",
|
199
208
|
# :ami_launch_index=>"0",
|
200
|
-
# :
|
201
|
-
#
|
202
|
-
#
|
203
|
-
# :
|
204
|
-
# :
|
205
|
-
# :
|
209
|
+
# :groups=>
|
210
|
+
# [{:group_id=>"sg-a0b85dc9", :group_name=>"default"},
|
211
|
+
# {:group_id=>"sg-70733019", :group_name=>"eugeg223123123"}],
|
212
|
+
# :aws_owner=>"826693181925",
|
213
|
+
# :aws_instance_type=>"m1.small",
|
214
|
+
# :aws_state=>"pending",
|
215
|
+
# :root_device_type=>"ebs",
|
216
|
+
# :aws_image_id=>"ami-78779511",
|
217
|
+
# :aws_kernel_id=>"aki-a71cf9ce",
|
218
|
+
# :aws_launch_time=>"2011-07-01T14:59:35.000Z",
|
219
|
+
# :aws_state_code=>0,
|
220
|
+
# :aws_instance_id=>"i-4f202621",
|
221
|
+
# :aws_product_codes=>[]}]
|
206
222
|
#
|
207
223
|
def launch_instances(image_id, options={})
|
208
|
-
options[:
|
209
|
-
|
210
|
-
|
211
|
-
|
224
|
+
options[:user_data] = options[:user_data].to_s
|
225
|
+
params = map_api_keys_and_values( options,
|
226
|
+
:key_name, :addressing_type, :kernel_id,
|
227
|
+
:ramdisk_id, :subnet_id, :instance_initiated_shutdown_behavior,
|
228
|
+
:private_ip_address, :additional_info, :license_pool,
|
229
|
+
:image_id => { :value => image_id },
|
230
|
+
:min_count => { :value => options[:min_count] || 1 },
|
231
|
+
:max_count => { :value => options[:max_count] || options[:min_count] || 1 },
|
232
|
+
:placement_tenancy => 'Placement.Tenancy',
|
233
|
+
:placement_group_name => 'Placement.GroupName',
|
234
|
+
:availability_zone => 'Placement.AvailabilityZone',
|
235
|
+
:group_names => { :amazonize_list => 'SecurityGroup' },
|
236
|
+
:group_ids => { :amazonize_list => 'SecurityGroupId' },
|
237
|
+
:block_device_mappings => { :amazonize_bdm => 'BlockDeviceMapping' },
|
238
|
+
:instance_type => { :value => options[:instance_type] || DEFAULT_INSTANCE_TYPE },
|
239
|
+
:disable_api_termination => { :value => Proc.new{ !options[:disable_api_termination].nil? && options[:disable_api_termination].to_s }},
|
240
|
+
:client_token => { :value => !@params[:eucalyptus] && (options[:client_token] || AwsUtils::generate_unique_token)},
|
241
|
+
:user_data => { :value => Proc.new { !options[:user_data].empty? && Base64.encode64(options[:user_data]).delete("\n") }},
|
242
|
+
:monitoring_enabled => { :name => 'Monitoring.Enabled',
|
243
|
+
:value => Proc.new{ options[:monitoring_enabled] && options[:monitoring_enabled].to_s }})
|
212
244
|
# Log debug information
|
213
245
|
@logger.info("Launching instance of image #{image_id}. Options: #{params.inspect}")
|
214
246
|
link = generate_request("RunInstances", params)
|
@@ -218,39 +250,6 @@ module RightAws
|
|
218
250
|
on_exception
|
219
251
|
end
|
220
252
|
|
221
|
-
def prepare_instance_launch_params(options={}) # :nodoc:
|
222
|
-
params = amazonize_list('SecurityGroup', Array(options[:group_ids]))
|
223
|
-
params['InstanceType'] = options[:instance_type] || DEFAULT_INSTANCE_TYPE
|
224
|
-
params['ImageId'] = options[:image_id] unless options[:image_id].right_blank?
|
225
|
-
params['AddressingType'] = options[:addressing_type] unless options[:addressing_type].right_blank?
|
226
|
-
params['MinCount'] = options[:min_count] unless options[:min_count].right_blank?
|
227
|
-
params['MaxCount'] = options[:max_count] unless options[:max_count].right_blank?
|
228
|
-
params['KeyName'] = options[:key_name] unless options[:key_name].right_blank?
|
229
|
-
params['KernelId'] = options[:kernel_id] unless options[:kernel_id].right_blank?
|
230
|
-
params['RamdiskId'] = options[:ramdisk_id] unless options[:ramdisk_id].right_blank?
|
231
|
-
params['Placement.AvailabilityZone'] = options[:availability_zone] unless options[:availability_zone].right_blank?
|
232
|
-
params['Monitoring.Enabled'] = options[:monitoring_enabled].to_s if options[:monitoring_enabled]
|
233
|
-
params['SubnetId'] = options[:subnet_id] unless options[:subnet_id].right_blank?
|
234
|
-
params['AdditionalInfo'] = options[:additional_info] unless options[:additional_info].right_blank?
|
235
|
-
params['DisableApiTermination'] = options[:disable_api_termination].to_s unless options[:disable_api_termination].nil?
|
236
|
-
params['InstanceInitiatedShutdownBehavior'] = options[:instance_initiated_shutdown_behavior] unless options[:instance_initiated_shutdown_behavior].right_blank?
|
237
|
-
params['Placement.GroupName'] = options[:placement_group_name] unless options[:placement_group_name].right_blank?
|
238
|
-
params['License.Pool'] = options[:license_pool] unless options[:license_pool].right_blank?
|
239
|
-
params['ClientToken'] = options[:client_token] || AwsUtils::generate_unique_token
|
240
|
-
params.merge!(amazonize_block_device_mappings(options[:block_device_mappings]))
|
241
|
-
# KD: https://github.com/rightscale/right_aws/issues#issue/11
|
242
|
-
# Do not modify user data and pass it as is: one may pass there a hex-binary data
|
243
|
-
options[:user_data] = options[:user_data].to_s
|
244
|
-
unless options[:user_data].empty?
|
245
|
-
# Do not use CGI::escape(encode64(...)) as it is done in Amazons EC2 library.
|
246
|
-
# Amazon 169.254.169.254 does not like escaped symbols!
|
247
|
-
# And it doesn't like "\n" inside of encoded string! Grrr....
|
248
|
-
# Otherwise, some of UserData symbols will be lost...
|
249
|
-
params['UserData'] = Base64.encode64(options[:user_data]).delete("\n")
|
250
|
-
end
|
251
|
-
params
|
252
|
-
end
|
253
|
-
|
254
253
|
# Start instances.
|
255
254
|
#
|
256
255
|
# ec2.start_instances("i-36e84a5e") #=>
|
@@ -268,6 +267,8 @@ module RightAws
|
|
268
267
|
|
269
268
|
# Stop instances.
|
270
269
|
#
|
270
|
+
# Options: :force => true|false
|
271
|
+
#
|
271
272
|
# ec2.stop_instances("i-36e84a5e") #=>
|
272
273
|
# [{:aws_prev_state_code=>16,
|
273
274
|
# :aws_prev_state_name=>"running",
|
@@ -275,9 +276,12 @@ module RightAws
|
|
275
276
|
# :aws_current_state_code=>64,
|
276
277
|
# :aws_current_state_name=>"stopping"}]
|
277
278
|
#
|
278
|
-
def stop_instances(*
|
279
|
-
|
280
|
-
|
279
|
+
def stop_instances(*instance_aws_ids_and_options)
|
280
|
+
list, options = AwsUtils::split_items_and_params(instance_aws_ids_and_options)
|
281
|
+
request_hash = {}
|
282
|
+
request_hash['Force'] = true if options[:force]
|
283
|
+
request_hash.merge!(amazonize_list('InstanceId', list))
|
284
|
+
link = generate_request("StopInstances", request_hash)
|
281
285
|
request_info(link, QEc2TerminateInstancesParser.new(:logger => @logger))
|
282
286
|
end
|
283
287
|
|
@@ -324,52 +328,38 @@ module RightAws
|
|
324
328
|
on_exception
|
325
329
|
end
|
326
330
|
|
327
|
-
INSTANCE_ATTRIBUTE_MAPPING = {
|
328
|
-
"instance_type" => "instanceType",
|
329
|
-
"kernel" => "kernel",
|
330
|
-
"ramdisk" => "ramdisk",
|
331
|
-
"user_data" => "userData",
|
332
|
-
"disable_api_termination" => "disableApiTermination",
|
333
|
-
"instance_initiated_shutdown_behavior" => "instanceInitiatedShutdownBehavior",
|
334
|
-
"root_device_name" => "rootDeviceName",
|
335
|
-
"block_device_mapping" => "blockDeviceMapping"
|
336
|
-
}
|
337
|
-
|
338
331
|
# Describe instance attribute.
|
339
|
-
# Attributes: :instance_type, :kernel, :ramdisk, :user_data, :disable_api_termination, :instance_initiated_shutdown_behavior, :root_device_name, :block_device_mapping
|
340
332
|
#
|
341
|
-
#
|
333
|
+
# Attributes: 'instanceType', 'kernel', 'ramdisk', 'userData', 'rootDeviceName', 'disableApiTermination',
|
334
|
+
# 'instanceInitiatedShutdownBehavior', 'sourceDestCheck', 'blockDeviceMapping', 'groupSet'
|
335
|
+
#
|
336
|
+
# ec2.describe_instance_attribute(instance, "blockDeviceMapping") #=>
|
342
337
|
# [{:ebs_delete_on_termination=>true,
|
343
338
|
# :ebs_volume_id=>"vol-683dc401",
|
344
339
|
# :device_name=>"/dev/sda1"}]
|
345
340
|
#
|
346
|
-
# ec2.describe_instance_attribute(instance, "
|
341
|
+
# ec2.describe_instance_attribute(instance, "instanceType") #=> "m1.small"
|
347
342
|
#
|
348
|
-
# ec2.describe_instance_attribute(instance, "
|
343
|
+
# ec2.describe_instance_attribute(instance, "instanceInitiatedShutdownBehavior") #=> "stop"
|
349
344
|
#
|
350
345
|
def describe_instance_attribute(instance_id, attribute)
|
351
|
-
attribute = INSTANCE_ATTRIBUTE_MAPPING[attribute.to_s] || attribute.to_s
|
352
346
|
link = generate_request('DescribeInstanceAttribute',
|
353
347
|
'InstanceId' => instance_id,
|
354
348
|
'Attribute' => attribute)
|
355
349
|
value = request_info(link, QEc2DescribeInstanceAttributeParser.new(:logger => @logger))
|
356
|
-
|
357
|
-
|
358
|
-
Base64.decode64(value)
|
359
|
-
else
|
360
|
-
value
|
361
|
-
end
|
350
|
+
value = Base64.decode64(value) if attribute == "userData" && !value.right_blank?
|
351
|
+
value
|
362
352
|
rescue Exception
|
363
353
|
on_exception
|
364
354
|
end
|
365
355
|
|
366
356
|
# Describe instance attribute.
|
367
|
-
# Attributes: :kernel, :ramdisk
|
368
357
|
#
|
369
|
-
#
|
358
|
+
# Attributes: 'kernel', 'ramdisk', 'sourceDestCheck'
|
359
|
+
#
|
360
|
+
# ec2.reset_instance_attribute(instance, 'kernel') #=> true
|
370
361
|
#
|
371
362
|
def reset_instance_attribute(instance_id, attribute)
|
372
|
-
attribute = INSTANCE_ATTRIBUTE_MAPPING[attribute.to_s] || attribute.to_s
|
373
363
|
link = generate_request('ResetInstanceAttribute',
|
374
364
|
'InstanceId' => instance_id,
|
375
365
|
'Attribute' => attribute )
|
@@ -379,23 +369,21 @@ module RightAws
|
|
379
369
|
end
|
380
370
|
|
381
371
|
# Modify instance attribute.
|
382
|
-
# Attributes: :instance_type, :kernel, :ramdisk, :user_data, :disable_api_termination, :instance_initiated_shutdown_behavior, :root_device_name, :block_device_mapping
|
383
372
|
#
|
384
|
-
#
|
373
|
+
# Attributes: 'InstanceType', 'Kernel', 'Ramdisk', 'UserData', 'DisableApiTermination',
|
374
|
+
# 'InstanceInitiatedShutdownBehavior', 'SourceDestCheck', 'GroupId'
|
375
|
+
#
|
376
|
+
# ec2.modify_instance_attribute(instance, 'instanceInitiatedShutdownBehavior", "stop") #=> true
|
385
377
|
#
|
386
378
|
def modify_instance_attribute(instance_id, attribute, value)
|
387
|
-
|
388
|
-
|
389
|
-
'Attribute' => attribute }
|
379
|
+
request_hash = {'InstanceId' => instance_id}
|
380
|
+
attribute = attribute.to_s.right_underscore.right_camelize
|
390
381
|
case attribute
|
391
|
-
when "
|
392
|
-
|
393
|
-
|
394
|
-
params['Value'] = Base64.encode64(value).delete("\n")
|
395
|
-
else
|
396
|
-
params['Value'] = value
|
382
|
+
when 'UserData' then request_hash["#{attribute}.Value"] = Base64.encode64(value).delete("\n")
|
383
|
+
when 'GroupId' then request_hash.merge!(amazonize_list('GroupId', value))
|
384
|
+
else request_hash["#{attribute}.Value"] = value
|
397
385
|
end
|
398
|
-
link = generate_request('ModifyInstanceAttribute',
|
386
|
+
link = generate_request('ModifyInstanceAttribute', request_hash)
|
399
387
|
request_info(link, RightBoolResponseParser.new(:logger => @logger))
|
400
388
|
rescue Exception
|
401
389
|
on_exception
|
@@ -551,21 +539,16 @@ module RightAws
|
|
551
539
|
|
552
540
|
class QEc2DescribeInstancesParser < RightAWSParser #:nodoc:
|
553
541
|
def tagstart(name, attributes)
|
554
|
-
# DescribeInstances property
|
555
542
|
case full_tag_name
|
556
|
-
when
|
557
|
-
'RunInstancesResponse'
|
543
|
+
when %r{(RunInstancesResponse|DescribeInstancesResponse/reservationSet/item)$}
|
558
544
|
@reservation = { :aws_groups => [],
|
559
545
|
:instances_set => [] }
|
546
|
+
when %r{(/groupSet/item|instancesSet/item/placement)$}
|
547
|
+
@group = {}
|
560
548
|
when %r{instancesSet/item$}
|
561
549
|
# the optional params (sometimes are missing and we dont want them to be nil)
|
562
|
-
@item = { :
|
563
|
-
:
|
564
|
-
:private_dns_name => '',
|
565
|
-
:ami_launch_index => '',
|
566
|
-
:ssh_key_name => '',
|
567
|
-
:aws_state => '',
|
568
|
-
:aws_product_codes => [],
|
550
|
+
@item = { :aws_product_codes => [],
|
551
|
+
:groups => [],
|
569
552
|
:tags => {} }
|
570
553
|
when %r{blockDeviceMapping/item$}
|
571
554
|
@item[:block_device_mappings] ||= []
|
@@ -578,7 +561,6 @@ module RightAws
|
|
578
561
|
case name
|
579
562
|
when 'reservationId' then @reservation[:aws_reservation_id] = @text
|
580
563
|
when 'ownerId' then @reservation[:aws_owner] = @text
|
581
|
-
when 'groupId' then @reservation[:aws_groups] << @text
|
582
564
|
when 'instanceId' then @item[:aws_instance_id] = @text
|
583
565
|
when 'imageId' then @item[:aws_image_id] = @text
|
584
566
|
when 'privateDnsName' then @item[:private_dns_name] = @text
|
@@ -604,11 +586,25 @@ module RightAws
|
|
604
586
|
when 'instanceLifecycle' then @item[:instance_lifecycle] = @text
|
605
587
|
when 'spotInstanceRequestId' then @item[:spot_instance_request_id] = @text
|
606
588
|
when 'requesterId' then @item[:requester_id] = @text
|
607
|
-
when 'groupName' then @item[:placement_group_name] = @text
|
608
589
|
when 'virtualizationType' then @item[:virtualization_type] = @text
|
609
|
-
when 'clientToken' then @item[:client_token]
|
590
|
+
when 'clientToken' then @item[:client_token] = @text
|
591
|
+
when 'sourceDestCheck' then @item[:source_dest_check] = @text == 'true' ? true : false
|
592
|
+
when 'tenancy' then @item[:placement_tenancy] = @text
|
593
|
+
when 'hypervisor' then @item[:hypervisor] = @text
|
610
594
|
else
|
611
595
|
case full_tag_name
|
596
|
+
# EC2 Groups
|
597
|
+
when %r{(RunInstancesResponse|/reservationSet/item)/groupSet/item/groupId$} then @group[:group_id] = @text
|
598
|
+
when %r{(RunInstancesResponse|/reservationSet/item)/groupSet/item/groupName$} then @group[:group_name] = @text
|
599
|
+
when %r{(RunInstancesResponse|/reservationSet/item)/groupSet/item$} then @reservation[:aws_groups] << @group
|
600
|
+
# VPC Groups
|
601
|
+
# KD: It seems that these groups are always present when the groups above present for non VPC instances only
|
602
|
+
when %r{/instancesSet/item/groupSet/item/groupId$} then @group[:group_id] = @text
|
603
|
+
when %r{/instancesSet/item/groupSet/item/groupName$} then @group[:group_name] = @text
|
604
|
+
when %r{/instancesSet/item/groupSet/item$} then @item[:groups] << @group
|
605
|
+
# Placement Group Name
|
606
|
+
when %r{/placement/groupName$} then @group[:placement_group_name]= @text
|
607
|
+
# Codes
|
612
608
|
when %r{/stateReason/code$} then @item[:state_reason_code] = @text
|
613
609
|
when %r{/stateReason/message$} then @item[:state_reason_message] = @text
|
614
610
|
when %r{/instanceState/code$} then @item[:aws_state_code] = @text.to_i
|
@@ -629,9 +625,7 @@ module RightAws
|
|
629
625
|
when %r{/tagSet/item/key$} then @aws_tag[:key] = @text
|
630
626
|
when %r{/tagSet/item/value$} then @aws_tag[:value] = @text
|
631
627
|
when %r{/tagSet/item$} then @item[:tags][@aws_tag[:key]] = @aws_tag[:value]
|
632
|
-
when
|
633
|
-
'RunInstancesResponse'
|
634
|
-
@result << @reservation
|
628
|
+
when %r{(RunInstancesResponse|DescribeInstancesResponse/reservationSet/item)$} then @result << @reservation
|
635
629
|
end
|
636
630
|
end
|
637
631
|
end
|
@@ -668,6 +662,8 @@ module RightAws
|
|
668
662
|
class QEc2DescribeInstanceAttributeParser < RightAWSParser #:nodoc:
|
669
663
|
def tagstart(name, attributes)
|
670
664
|
case full_tag_name
|
665
|
+
when %r{groupSet$} then @result = []
|
666
|
+
when %r{groupSet/item$} then @group = {}
|
671
667
|
when %r{blockDeviceMapping$} then @result = []
|
672
668
|
when %r{blockDeviceMapping/item$} then @block_device_mapping = {}
|
673
669
|
end
|
@@ -675,12 +671,19 @@ module RightAws
|
|
675
671
|
def tagend(name)
|
676
672
|
case full_tag_name
|
677
673
|
when %r{/instanceType/value$} then @result = @text
|
678
|
-
when %r{/kernel$}
|
679
|
-
when %r{/ramdisk$}
|
680
|
-
when %r{/userData$}
|
674
|
+
when %r{/kernel/value$} then @result = @text
|
675
|
+
when %r{/ramdisk/value$} then @result = @text
|
676
|
+
when %r{/userData/value$} then @result = @text
|
681
677
|
when %r{/rootDeviceName/value$} then @result = @text
|
682
678
|
when %r{/disableApiTermination/value} then @result = @text == 'true' ? true : false
|
683
679
|
when %r{/instanceInitiatedShutdownBehavior/value$} then @result = @text
|
680
|
+
when %r{/sourceDestCheck/value$} then @result = @text == 'true' ? true : false
|
681
|
+
when %r{/groupSet/item} # no trailing $
|
682
|
+
case name
|
683
|
+
when 'groupId' then @group[:group_id] = @text
|
684
|
+
when 'groupName' then @group[:group_name] = @text
|
685
|
+
when 'item' then @result << @group
|
686
|
+
end
|
684
687
|
when %r{/blockDeviceMapping/item} # no trailing $
|
685
688
|
case name
|
686
689
|
when 'deviceName' then @block_device_mapping[:device_name] = @text
|