poolparty 1.4.6 → 1.4.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. data/VERSION.yml +2 -2
  2. data/bin/cloud-contract +6 -1
  3. data/bin/cloud-list +5 -6
  4. data/bin/cloud-vnc +39 -0
  5. data/examples/rds_cloud.rb +44 -0
  6. data/lib/cloud_providers/connections.rb +0 -1
  7. data/lib/cloud_providers/ec2/ec2.rb +86 -25
  8. data/lib/cloud_providers/ec2/ec2_instance.rb +6 -2
  9. data/lib/cloud_providers/ec2/helpers/ec2_helper.rb +19 -6
  10. data/lib/cloud_providers/ec2/helpers/elastic_load_balancer.rb +3 -3
  11. data/lib/cloud_providers/ec2/helpers/rds_instance.rb +110 -0
  12. data/lib/cloud_providers/remote_instance.rb +5 -3
  13. data/lib/poolparty/cloud.rb +8 -3
  14. data/lib/poolparty/pool.rb +12 -0
  15. data/test/fixtures/clouds/rds_cloud.rb +14 -0
  16. data/test/fixtures/clouds/rds_missing_params.rb +11 -0
  17. data/test/fixtures/ec2/ec2-describe-security-groups_response_body.xml +23 -0
  18. data/test/fixtures/ec2/rds-describe-db-instances-empty_response_body.xml +9 -0
  19. data/test/lib/poolparty/rds_test.rb +35 -0
  20. data/test/test_helper.rb +4 -4
  21. data/vendor/gems/amazon-ec2/ChangeLog +15 -0
  22. data/vendor/gems/amazon-ec2/README.rdoc +27 -24
  23. data/vendor/gems/amazon-ec2/README_dev.rdoc +0 -2
  24. data/vendor/gems/amazon-ec2/Rakefile +8 -39
  25. data/vendor/gems/amazon-ec2/VERSION +1 -1
  26. data/vendor/gems/amazon-ec2/amazon-ec2.gemspec +24 -16
  27. data/vendor/gems/amazon-ec2/bin/setup.rb +1 -0
  28. data/vendor/gems/amazon-ec2/lib/AWS/Autoscaling/autoscaling.rb +6 -16
  29. data/vendor/gems/amazon-ec2/lib/AWS/EC2/availability_zones.rb +8 -0
  30. data/vendor/gems/amazon-ec2/lib/AWS/EC2/console.rb +2 -0
  31. data/vendor/gems/amazon-ec2/lib/AWS/EC2/devpay.rb +18 -0
  32. data/vendor/gems/amazon-ec2/lib/AWS/EC2/elastic_ips.rb +37 -32
  33. data/vendor/gems/amazon-ec2/lib/AWS/EC2/images.rb +43 -27
  34. data/vendor/gems/amazon-ec2/lib/AWS/EC2/instances.rb +136 -99
  35. data/vendor/gems/amazon-ec2/lib/AWS/EC2/keypairs.rb +3 -17
  36. data/vendor/gems/amazon-ec2/lib/AWS/EC2/security_groups.rb +4 -23
  37. data/vendor/gems/amazon-ec2/lib/AWS/EC2/snapshots.rb +38 -17
  38. data/vendor/gems/amazon-ec2/lib/AWS/EC2/volumes.rb +6 -21
  39. data/vendor/gems/amazon-ec2/lib/AWS/EC2.rb +2 -2
  40. data/vendor/gems/amazon-ec2/lib/AWS/ELB/load_balancers.rb +11 -38
  41. data/vendor/gems/amazon-ec2/lib/AWS/RDS/rds.rb +522 -0
  42. data/vendor/gems/amazon-ec2/lib/AWS/RDS.rb +73 -0
  43. data/vendor/gems/amazon-ec2/lib/AWS/exceptions.rb +103 -25
  44. data/vendor/gems/amazon-ec2/lib/AWS.rb +19 -9
  45. data/vendor/gems/amazon-ec2/perftools/ec2prof +0 -0
  46. data/vendor/gems/amazon-ec2/perftools/ec2prof-results.dot +130 -191
  47. data/vendor/gems/amazon-ec2/perftools/ec2prof-results.txt +100 -126
  48. data/vendor/gems/amazon-ec2/perftools/ec2prof.symbols +102 -129
  49. data/vendor/gems/amazon-ec2/test/test_Autoscaling_groups.rb +3 -2
  50. data/vendor/gems/amazon-ec2/test/test_EC2_images.rb +32 -0
  51. data/vendor/gems/amazon-ec2/test/test_EC2_instances.rb +204 -22
  52. data/vendor/gems/amazon-ec2/test/test_EC2_snapshots.rb +1 -1
  53. data/vendor/gems/amazon-ec2/test/test_ELB_load_balancers.rb +2 -2
  54. data/vendor/gems/amazon-ec2/test/test_RDS.rb +354 -0
  55. data/vendor/gems/amazon-ec2/wsdl/2009-10-31.ec2.wsdl +4261 -0
  56. data/vendor/gems/amazon-ec2/wsdl/2009-11-30.ec2.wsdl +4668 -0
  57. metadata +17 -2
@@ -111,6 +111,43 @@ context "EC2 instances " do
111
111
  </RebootInstancesResponse>
112
112
  RESPONSE
113
113
 
114
+ @start_instances_response_body = <<-RESPONSE
115
+ <StartInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2009-10-31/">
116
+ <instancesSet>
117
+ <item>
118
+ <instanceId>i-10a64379</instanceId>
119
+ <currentState>
120
+ <code>0</code>
121
+ <name>pending</name>
122
+ </currentState>
123
+ <previousState>
124
+ <code>80</code>
125
+ <name>stopped</name>
126
+ </previousState>
127
+ </item>
128
+ </instancesSet>
129
+ </StartInstancesResponse>
130
+ RESPONSE
131
+
132
+
133
+ @stop_instances_response_body = <<-RESPONSE
134
+ <StopInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2009-10-31/">
135
+ <instancesSet>
136
+ <item>
137
+ <instanceId>i-28a64341</instanceId>
138
+ <currentState>
139
+ <code>64</code>
140
+ <name>stopping</name>
141
+ </currentState>
142
+ <previousState>
143
+ <code>16</code>
144
+ <name>running</name>
145
+ </previousState>
146
+ </item>
147
+ </instancesSet>
148
+ </StopInstancesResponse>
149
+ RESPONSE
150
+
114
151
  @terminate_instances_response_body = <<-RESPONSE
115
152
  <TerminateInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2007-03-01">
116
153
  <instancesSet>
@@ -184,7 +221,7 @@ context "EC2 instances " do
184
221
 
185
222
 
186
223
  specify "should be able to be run" do
187
- @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "AddressingType" => 'public', 'InstanceType' => 'm1.small').
224
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1').
188
225
  returns stub(:body => @run_instances_response_body, :is_a? => true)
189
226
 
190
227
  @ec2.run_instances( :image_id => "ami-60a54009" ).should.be.an.instance_of Hash
@@ -194,8 +231,6 @@ context "EC2 instances " do
194
231
  response.reservationId.should.equal "r-47a5402e"
195
232
  response.ownerId.should.equal "495219933132"
196
233
 
197
- response.groupSet.item[0].groupId.should.equal "default"
198
-
199
234
  response.instancesSet.item.length.should.equal 3
200
235
 
201
236
  response.instancesSet.item[0].instanceId.should.equal "i-2ba64342"
@@ -231,28 +266,93 @@ context "EC2 instances " do
231
266
 
232
267
 
233
268
  specify "method 'run_instances' should reject invalid arguments" do
234
- @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "AddressingType" => 'public', 'InstanceType' => 'm1.small').
269
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1').
235
270
  returns stub(:body => @run_instances_response_body, :is_a? => true)
236
271
 
237
272
  lambda { @ec2.run_instances() }.should.raise(AWS::ArgumentError)
273
+
274
+ # :addressing_type is deprecated
275
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :addressing_type => nil ) }.should.not.raise(AWS::ArgumentError)
276
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :addressing_type => "" ) }.should.raise(AWS::ArgumentError)
277
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :addressing_type => "foo" ) }.should.raise(AWS::ArgumentError)
278
+
279
+ # :group_id is deprecated
280
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :group_id => nil ) }.should.not.raise(AWS::ArgumentError)
281
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :group_id => "" ) }.should.raise(AWS::ArgumentError)
282
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :group_id => "foo" ) }.should.raise(AWS::ArgumentError)
283
+
284
+ # :image_id
285
+ lambda { @ec2.run_instances( :image_id => nil ) }.should.raise(AWS::ArgumentError)
238
286
  lambda { @ec2.run_instances( :image_id => "" ) }.should.raise(AWS::ArgumentError)
239
287
 
288
+ # :min_count
240
289
  lambda { @ec2.run_instances( :image_id => "ami-60a54009", :min_count => 1 ) }.should.not.raise(AWS::ArgumentError)
241
290
  lambda { @ec2.run_instances( :image_id => "ami-60a54009", :min_count => 0 ) }.should.raise(AWS::ArgumentError)
242
291
  lambda { @ec2.run_instances( :image_id => "ami-60a54009", :min_count => nil ) }.should.raise(AWS::ArgumentError)
243
292
  lambda { @ec2.run_instances( :image_id => "ami-60a54009", :min_count => "" ) }.should.raise(AWS::ArgumentError)
293
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :min_count => "foo" ) }.should.raise(AWS::ArgumentError)
244
294
 
295
+ # :max_count
245
296
  lambda { @ec2.run_instances( :image_id => "ami-60a54009", :max_count => 1 ) }.should.not.raise(AWS::ArgumentError)
246
297
  lambda { @ec2.run_instances( :image_id => "ami-60a54009", :max_count => 0 ) }.should.raise(AWS::ArgumentError)
247
298
  lambda { @ec2.run_instances( :image_id => "ami-60a54009", :max_count => nil ) }.should.raise(AWS::ArgumentError)
248
299
  lambda { @ec2.run_instances( :image_id => "ami-60a54009", :max_count => "" ) }.should.raise(AWS::ArgumentError)
300
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :max_count => "foo" ) }.should.raise(AWS::ArgumentError)
249
301
 
250
- lambda { @ec2.run_instances( :image_id => "ami-60a54009", :addressing_type => "public" ) }.should.not.raise(AWS::ArgumentError)
251
- #lambda { @ec2.run_instances( :image_id => "ami-60a54009", :addressing_type => "direct" ) }.should.not.raise(AWS::ArgumentError)
252
- lambda { @ec2.run_instances( :image_id => "ami-60a54009", :addressing_type => nil ) }.should.raise(AWS::ArgumentError)
253
- lambda { @ec2.run_instances( :image_id => "ami-60a54009", :addressing_type => "" ) }.should.raise(AWS::ArgumentError)
254
- lambda { @ec2.run_instances( :image_id => "ami-60a54009", :addressing_type => "foo" ) }.should.raise(AWS::ArgumentError)
302
+ # :min_count & :max_count
303
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :min_count => 1, :max_count => 1 ) }.should.not.raise(AWS::ArgumentError)
304
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :min_count => 2, :max_count => 1 ) }.should.raise(AWS::ArgumentError)
305
+
306
+ # :instance_type
307
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "InstanceType" => 'm1.small').
308
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
309
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :instance_type => "m1.small" ) }.should.not.raise(AWS::ArgumentError)
310
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :instance_type => "m1.notarealsize" ) }.should.raise(AWS::ArgumentError)
311
+
312
+ # :monitoring_enabled
313
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "Monitoring.Enabled" => 'true').
314
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
315
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :monitoring_enabled => true ) }.should.not.raise(AWS::ArgumentError)
316
+
317
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "Monitoring.Enabled" => 'false').
318
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
319
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :monitoring_enabled => false ) }.should.not.raise(AWS::ArgumentError)
320
+
321
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "Monitoring.Enabled" => 'false').
322
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
323
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :monitoring_enabled => "foo" ) }.should.raise(AWS::ArgumentError)
324
+
325
+ # :disable_api_termination
326
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "DisableApiTermination" => 'true').
327
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
328
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :disable_api_termination => true ) }.should.not.raise(AWS::ArgumentError)
329
+
330
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "DisableApiTermination" => 'false').
331
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
332
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :disable_api_termination => false ) }.should.not.raise(AWS::ArgumentError)
333
+
334
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "DisableApiTermination" => 'false').
335
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
336
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :disable_api_termination => "foo" ) }.should.raise(AWS::ArgumentError)
337
+
338
+ # :instance_initiated_shutdown_behavior
339
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "InstanceInitiatedShutdownBehavior" => 'stop').
340
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
341
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :instance_initiated_shutdown_behavior => 'stop' ) }.should.not.raise(AWS::ArgumentError)
342
+
343
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "InstanceInitiatedShutdownBehavior" => 'terminate').
344
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
345
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :instance_initiated_shutdown_behavior => 'terminate' ) }.should.not.raise(AWS::ArgumentError)
346
+
347
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "InstanceInitiatedShutdownBehavior" => 'stop').
348
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
349
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :instance_initiated_shutdown_behavior => "foo" ) }.should.raise(AWS::ArgumentError)
350
+
351
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "InstanceInitiatedShutdownBehavior" => 'stop').
352
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
353
+ lambda { @ec2.run_instances( :image_id => "ami-60a54009", :instance_initiated_shutdown_behavior => true ) }.should.raise(AWS::ArgumentError)
255
354
 
355
+ # :base64_encoded
256
356
  lambda { @ec2.run_instances( :image_id => "ami-60a54009", :base64_encoded => true ) }.should.not.raise(AWS::ArgumentError)
257
357
  lambda { @ec2.run_instances( :image_id => "ami-60a54009", :base64_encoded => false ) }.should.not.raise(AWS::ArgumentError)
258
358
  lambda { @ec2.run_instances( :image_id => "ami-60a54009", :base64_encoded => nil ) }.should.raise(AWS::ArgumentError)
@@ -260,29 +360,88 @@ context "EC2 instances " do
260
360
  lambda { @ec2.run_instances( :image_id => "ami-60a54009", :base64_encoded => "foo" ) }.should.raise(AWS::ArgumentError)
261
361
  end
262
362
 
363
+ specify "should be able specify a key_name" do
364
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "KeyName" => 'foo').
365
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
366
+ @ec2.run_instances( :image_id => "ami-60a54009", :key_name => "foo" ).should.be.an.instance_of Hash
367
+ end
368
+
369
+ specify "should be able specify a security_group" do
370
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "SecurityGroup.1" => 'foo', "SecurityGroup.2" => 'bar').
371
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
372
+ @ec2.run_instances( :image_id => "ami-60a54009", :security_group => ["foo","bar"] ).should.be.an.instance_of Hash
373
+ end
263
374
 
264
- specify "should be able specify an availability_zone" do
265
- @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "Placement.AvailabilityZone" => "zone123", "UserData" => "Zm9v", "AddressingType" => 'public', 'InstanceType' => 'm1.small').
375
+ specify "should be able specify additional_info" do
376
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "AdditionalInfo" => 'foo').
266
377
  returns stub(:body => @run_instances_response_body, :is_a? => true)
267
- @ec2.run_instances( :image_id => "ami-60a54009", :min_count => 1, :max_count => 1, :availability_zone => "zone123", :group_id => [], :user_data => "foo", :base64_encoded => true ).should.be.an.instance_of Hash
378
+ @ec2.run_instances( :image_id => "ami-60a54009", :additional_info => "foo" ).should.be.an.instance_of Hash
268
379
  end
269
380
 
270
381
  specify "should be able to call run_instances with :user_data and :base64_encoded => true (default is false)" do
271
- @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "UserData" => "Zm9v", "AddressingType" => 'public', 'InstanceType' => 'm1.small').
382
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "UserData" => "Zm9v").
383
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
384
+ @ec2.run_instances( :image_id => "ami-60a54009", :min_count => 1, :max_count => 1, :user_data => "foo", :base64_encoded => true ).should.be.an.instance_of Hash
385
+ end
386
+
387
+ specify "should be able to call run_instances with :user_data and :base64_encoded => false" do
388
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "UserData" => "foo").
272
389
  returns stub(:body => @run_instances_response_body, :is_a? => true)
273
- @ec2.run_instances( :image_id => "ami-60a54009", :min_count => 1, :max_count => 1, :group_id => [], :user_data => "foo", :base64_encoded => true ).should.be.an.instance_of Hash
390
+ @ec2.run_instances( :image_id => "ami-60a54009", :min_count => 1, :max_count => 1, :user_data => "foo", :base64_encoded => false ).should.be.an.instance_of Hash
391
+ end
392
+
393
+ specify "should be able specify instance_type" do
394
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "InstanceType" => 'm1.small').
395
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
396
+ @ec2.run_instances( :image_id => "ami-60a54009", :instance_type => "m1.small" ).should.be.an.instance_of Hash
397
+ end
398
+
399
+ specify "should be able specify an availability_zone (Placement.AvailabilityZone)" do
400
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "Placement.AvailabilityZone" => "zone123").
401
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
402
+ @ec2.run_instances( :image_id => "ami-60a54009", :availability_zone => "zone123" ).should.be.an.instance_of Hash
274
403
  end
275
404
 
276
405
  specify "should be able specify an kernel_id" do
277
- @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "Placement.AvailabilityZone" => "zone123", "UserData" => "Zm9v", "AddressingType" => 'public', 'InstanceType' => 'm1.small', 'KernelId' => 'kernfoo').
406
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', 'KernelId' => 'kernfoo').
278
407
  returns stub(:body => @run_instances_response_body, :is_a? => true)
279
- @ec2.run_instances( :image_id => "ami-60a54009", :min_count => 1, :max_count => 1, :availability_zone => "zone123", :group_id => [], :user_data => "foo", :base64_encoded => true, :kernel_id => 'kernfoo' ).should.be.an.instance_of Hash
408
+ @ec2.run_instances( :image_id => "ami-60a54009", :kernel_id => 'kernfoo' ).should.be.an.instance_of Hash
280
409
  end
281
410
 
282
- specify "should be able to call run_instances with :user_data and :base64_encoded => false" do
283
- @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', "UserData" => "foo", "AddressingType" => 'public', 'InstanceType' => 'm1.small').
411
+ specify "should be able specify an ramdisk_id" do
412
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', 'RamdiskId' => 'foo').
284
413
  returns stub(:body => @run_instances_response_body, :is_a? => true)
285
- @ec2.run_instances( :image_id => "ami-60a54009", :min_count => 1, :max_count => 1, :group_id => [], :user_data => "foo", :base64_encoded => false ).should.be.an.instance_of Hash
414
+ @ec2.run_instances( :image_id => "ami-60a54009", :ramdisk_id => 'foo' ).should.be.an.instance_of Hash
415
+ end
416
+
417
+ specify "should be able specify monitoring_enabled" do
418
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', 'Monitoring.Enabled' => 'true').
419
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
420
+ @ec2.run_instances( :image_id => "ami-60a54009", :monitoring_enabled => true ).should.be.an.instance_of Hash
421
+ end
422
+
423
+ specify "should be able specify an subnet_id" do
424
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', 'SubnetId' => 'foo').
425
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
426
+ @ec2.run_instances( :image_id => "ami-60a54009", :subnet_id => 'foo' ).should.be.an.instance_of Hash
427
+ end
428
+
429
+ specify "should be able specify disable_api_termination" do
430
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', 'DisableApiTermination' => 'true').
431
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
432
+ @ec2.run_instances( :image_id => "ami-60a54009", :disable_api_termination => true ).should.be.an.instance_of Hash
433
+ end
434
+
435
+ specify "should be able specify instance_initiated_shutdown_behavior" do
436
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', 'InstanceInitiatedShutdownBehavior' => 'stop').
437
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
438
+ @ec2.run_instances( :image_id => "ami-60a54009", :instance_initiated_shutdown_behavior => 'stop' ).should.be.an.instance_of Hash
439
+ end
440
+
441
+ specify "should be able specify block_device_mapping" do
442
+ @ec2.stubs(:make_request).with('RunInstances', "ImageId" => "ami-60a54009", "MinCount" => '1', "MaxCount" => '1', 'BlockDeviceMapping.1.DeviceName' => '/dev/sdh', 'BlockDeviceMapping.1.VirtualName' => 'foo', 'BlockDeviceMapping.1.Ebs.SnapshotId' => 'foosnap', 'BlockDeviceMapping.1.Ebs.VolumeSize' => 'foovolsize', 'BlockDeviceMapping.1.Ebs.DeleteOnTermination' => 'true', 'BlockDeviceMapping.2.DeviceName' => '/dev/sdi', 'BlockDeviceMapping.2.VirtualName' => 'foo2', 'BlockDeviceMapping.2.Ebs.SnapshotId' => 'foosnap2', 'BlockDeviceMapping.2.Ebs.VolumeSize' => 'foovolsize2', 'BlockDeviceMapping.2.Ebs.DeleteOnTermination' => 'false').
443
+ returns stub(:body => @run_instances_response_body, :is_a? => true)
444
+ @ec2.run_instances( :image_id => "ami-60a54009", :block_device_mapping => [{:device_name => '/dev/sdh', :virtual_name => 'foo', :ebs_snapshot_id => 'foosnap', :ebs_volume_size => 'foovolsize', :ebs_delete_on_termination => true},{:device_name => '/dev/sdi', :virtual_name => 'foo2', :ebs_snapshot_id => 'foosnap2', :ebs_volume_size => 'foovolsize2', :ebs_delete_on_termination => false}] ).should.be.an.instance_of Hash
286
445
  end
287
446
 
288
447
  specify "should get no user data for when options has no user_data key" do
@@ -314,7 +473,6 @@ context "EC2 instances " do
314
473
  response = @ec2.describe_instances
315
474
  response.reservationSet.item[0].reservationId.should.equal "r-44a5402d"
316
475
  response.reservationSet.item[0].ownerId.should.equal "UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM"
317
- response.reservationSet.item[0].groupSet.item[0].groupId.should.equal "default"
318
476
  response.reservationSet.item[0].instancesSet.item[0].instanceId.should.equal "i-28a64341"
319
477
  response.reservationSet.item[0].instancesSet.item[0].imageId.should.equal "ami-6ea54007"
320
478
  response.reservationSet.item[0].instancesSet.item[0].instanceState.code.should.equal "0"
@@ -333,7 +491,6 @@ context "EC2 instances " do
333
491
  response = @ec2.describe_instances( :instance_id => "i-28a64341" )
334
492
  response.reservationSet.item[0].reservationId.should.equal "r-44a5402d"
335
493
  response.reservationSet.item[0].ownerId.should.equal "UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM"
336
- response.reservationSet.item[0].groupSet.item[0].groupId.should.equal "default"
337
494
  response.reservationSet.item[0].instancesSet.item[0].instanceId.should.equal "i-28a64341"
338
495
  response.reservationSet.item[0].instancesSet.item[0].imageId.should.equal "ami-6ea54007"
339
496
  response.reservationSet.item[0].instancesSet.item[0].instanceState.code.should.equal "0"
@@ -359,13 +516,38 @@ context "EC2 instances " do
359
516
  end
360
517
 
361
518
 
519
+ specify "method start_instances should raise an exception when called without nil/empty string arguments" do
520
+ lambda { @ec2.start_instances() }.should.raise(AWS::ArgumentError)
521
+ lambda { @ec2.start_instances( :instance_id => nil ) }.should.raise(AWS::ArgumentError)
522
+ lambda { @ec2.start_instances( :instance_id => "" ) }.should.raise(AWS::ArgumentError)
523
+ end
524
+
525
+
526
+ specify "should be able to be started when provided with an :instance_id" do
527
+ @ec2.stubs(:make_request).with('StartInstances', {"InstanceId.1"=>"i-28a64341", "InstanceId.2"=>"i-21a64348"}).
528
+ returns stub(:body => @start_instances_response_body, :is_a? => true)
529
+ @ec2.start_instances( :instance_id => ["i-28a64341", "i-21a64348"] ).class.should.equal Hash
530
+ end
531
+
532
+
533
+ specify "method stop_instances should raise an exception when called without nil/empty string arguments" do
534
+ lambda { @ec2.stop_instances() }.should.raise(AWS::ArgumentError)
535
+ lambda { @ec2.stop_instances( :instance_id => nil ) }.should.raise(AWS::ArgumentError)
536
+ lambda { @ec2.stop_instances( :instance_id => "" ) }.should.raise(AWS::ArgumentError)
537
+ end
538
+
539
+ specify "should be able to be stopped when provided with an :instance_id" do
540
+ @ec2.stubs(:make_request).with('StopInstances', {"InstanceId.1"=>"i-28a64341", "InstanceId.2"=>"i-21a64348"}).
541
+ returns stub(:body => @stop_instances_response_body, :is_a? => true)
542
+ @ec2.stop_instances( :instance_id => ["i-28a64341", "i-21a64348"] ).class.should.equal Hash
543
+ end
544
+
362
545
  specify "method terminate_instances should raise an exception when called without nil/empty string arguments" do
363
546
  lambda { @ec2.terminate_instances() }.should.raise(AWS::ArgumentError)
364
547
  lambda { @ec2.terminate_instances( :instance_id => nil ) }.should.raise(AWS::ArgumentError)
365
548
  lambda { @ec2.terminate_instances( :instance_id => "" ) }.should.raise(AWS::ArgumentError)
366
549
  end
367
550
 
368
-
369
551
  specify "should be able to be terminated when provided with an :instance_id" do
370
552
  @ec2.stubs(:make_request).with('TerminateInstances', {"InstanceId.1"=>"i-28a64341", "InstanceId.2"=>"i-21a64348"}).
371
553
  returns stub(:body => @terminate_instances_response_body, :is_a? => true)
@@ -45,7 +45,7 @@ context "EC2 snaphots " do
45
45
 
46
46
 
47
47
  specify "should be able to be described with describe_snapshots" do
48
- @ec2.stubs(:make_request).with('DescribeSnapshots', {"SnapshotId.1"=>"snap-78a54011"}).
48
+ @ec2.stubs(:make_request).with('DescribeSnapshots', {'SnapshotId.1' => 'snap-78a54011'}).
49
49
  returns stub(:body => @describe_snapshots_response_body, :is_a? => true)
50
50
 
51
51
  @ec2.describe_snapshots( :snapshot_id => "snap-78a54011" ).should.be.an.instance_of Hash
@@ -163,7 +163,7 @@ context "elb load balancers " do
163
163
  specify "should be able to be register instances to load balancers with register_instances_with_load_balancer" do
164
164
  @elb.stubs(:make_request).with('RegisterInstancesWithLoadBalancer', {
165
165
  'LoadBalancerName' => 'Test Name',
166
- 'Instances.member.1' => 'i-6055fa09'
166
+ 'Instances.member.1.InstanceId' => 'i-6055fa09'
167
167
  }).returns stub(:body => @register_instances_with_load_balancer_response_body, :is_a? => true)
168
168
 
169
169
  response = @elb.register_instances_with_load_balancer(@valid_register_instances_with_load_balancer_params)
@@ -175,7 +175,7 @@ context "elb load balancers " do
175
175
  specify "method register_instances_with_load_balancer should reject bad arguments" do
176
176
  @elb.stubs(:make_request).with('RegisterInstancesWithLoadBalancer', {
177
177
  'LoadBalancerName' => 'Test Name',
178
- 'Instances.member.1' => 'i-6055fa09'
178
+ 'Instances.member.1.InstanceId' => 'i-6055fa09'
179
179
  }).returns stub(:body => @register_instances_with_load_balancer_response_body, :is_a? => true)
180
180
 
181
181
  lambda { @elb.register_instances_with_load_balancer(@valid_register_instances_with_load_balancer_params) }.should.not.raise(AWS::ArgumentError)