fog 0.1.8 → 0.1.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.
Files changed (128) hide show
  1. data/Gemfile +2 -2
  2. data/Gemfile.lock +5 -5
  3. data/README.rdoc +29 -29
  4. data/fog.gemspec +24 -2
  5. data/lib/fog.rb +4 -15
  6. data/lib/fog/aws.rb +2 -2
  7. data/lib/fog/aws/ec2.rb +64 -101
  8. data/lib/fog/aws/elb.rb +19 -27
  9. data/lib/fog/aws/models/ec2/addresses.rb +1 -9
  10. data/lib/fog/aws/models/ec2/flavors.rb +1 -7
  11. data/lib/fog/aws/models/ec2/images.rb +1 -7
  12. data/lib/fog/aws/models/ec2/key_pairs.rb +1 -7
  13. data/lib/fog/aws/models/ec2/security_groups.rb +1 -7
  14. data/lib/fog/aws/models/ec2/servers.rb +1 -7
  15. data/lib/fog/aws/models/ec2/snapshots.rb +1 -9
  16. data/lib/fog/aws/models/ec2/volumes.rb +1 -9
  17. data/lib/fog/aws/models/s3/directories.rb +1 -7
  18. data/lib/fog/aws/models/s3/file.rb +5 -0
  19. data/lib/fog/aws/requests/ec2/allocate_address.rb +2 -0
  20. data/lib/fog/aws/requests/ec2/attach_volume.rb +2 -0
  21. data/lib/fog/aws/requests/ec2/create_key_pair.rb +2 -0
  22. data/lib/fog/aws/requests/ec2/create_snapshot.rb +2 -0
  23. data/lib/fog/aws/requests/ec2/create_volume.rb +2 -0
  24. data/lib/fog/aws/requests/ec2/describe_addresses.rb +2 -0
  25. data/lib/fog/aws/requests/ec2/describe_availability_zones.rb +2 -0
  26. data/lib/fog/aws/requests/ec2/describe_images.rb +2 -0
  27. data/lib/fog/aws/requests/ec2/describe_instances.rb +2 -0
  28. data/lib/fog/aws/requests/ec2/describe_key_pairs.rb +2 -0
  29. data/lib/fog/aws/requests/ec2/describe_regions.rb +2 -0
  30. data/lib/fog/aws/requests/ec2/describe_reserved_instances.rb +2 -0
  31. data/lib/fog/aws/requests/ec2/describe_security_groups.rb +2 -0
  32. data/lib/fog/aws/requests/ec2/describe_snapshots.rb +2 -0
  33. data/lib/fog/aws/requests/ec2/describe_volumes.rb +2 -0
  34. data/lib/fog/aws/requests/ec2/detach_volume.rb +2 -0
  35. data/lib/fog/aws/requests/ec2/get_console_output.rb +2 -0
  36. data/lib/fog/aws/requests/ec2/run_instances.rb +2 -0
  37. data/lib/fog/aws/requests/ec2/terminate_instances.rb +2 -0
  38. data/lib/fog/aws/requests/elb/create_load_balancer.rb +2 -0
  39. data/lib/fog/aws/requests/elb/delete_load_balancer.rb +2 -0
  40. data/lib/fog/aws/requests/elb/deregister_instances_from_load_balancer.rb +2 -0
  41. data/lib/fog/aws/requests/elb/describe_instance_health.rb +2 -0
  42. data/lib/fog/aws/requests/elb/describe_load_balancers.rb +2 -0
  43. data/lib/fog/aws/requests/elb/disable_availability_zones_for_load_balancer.rb +2 -0
  44. data/lib/fog/aws/requests/elb/enable_availability_zones_for_load_balancer.rb +2 -0
  45. data/lib/fog/aws/requests/elb/register_instances_with_load_balancer.rb +2 -0
  46. data/lib/fog/aws/requests/s3/copy_object.rb +2 -0
  47. data/lib/fog/aws/requests/s3/get_bucket.rb +2 -0
  48. data/lib/fog/aws/requests/s3/get_bucket_acl.rb +2 -0
  49. data/lib/fog/aws/requests/s3/get_bucket_location.rb +2 -0
  50. data/lib/fog/aws/requests/s3/get_bucket_logging.rb +2 -0
  51. data/lib/fog/aws/requests/s3/get_bucket_object_versions.rb +2 -0
  52. data/lib/fog/aws/requests/s3/get_bucket_versioning.rb +2 -0
  53. data/lib/fog/aws/requests/s3/get_object_acl.rb +2 -0
  54. data/lib/fog/aws/requests/s3/get_request_payment.rb +2 -0
  55. data/lib/fog/aws/requests/s3/get_service.rb +2 -0
  56. data/lib/fog/aws/requests/s3/put_object.rb +2 -2
  57. data/lib/fog/aws/requests/simpledb/domain_metadata.rb +2 -0
  58. data/lib/fog/aws/requests/simpledb/get_attributes.rb +2 -0
  59. data/lib/fog/aws/requests/simpledb/list_domains.rb +2 -0
  60. data/lib/fog/aws/requests/simpledb/select.rb +2 -0
  61. data/lib/fog/aws/s3.rb +68 -85
  62. data/lib/fog/aws/simpledb.rb +15 -29
  63. data/lib/fog/bluebox.rb +23 -40
  64. data/lib/fog/bluebox/models/flavors.rb +1 -7
  65. data/lib/fog/bluebox/models/images.rb +1 -9
  66. data/lib/fog/bluebox/models/servers.rb +1 -7
  67. data/lib/fog/credentials.rb +2 -0
  68. data/lib/fog/errors.rb +20 -0
  69. data/lib/fog/hmac.rb +48 -0
  70. data/lib/fog/local.rb +9 -22
  71. data/lib/fog/local/models/directories.rb +1 -7
  72. data/lib/fog/rackspace.rb +2 -6
  73. data/lib/fog/rackspace/files.rb +46 -48
  74. data/lib/fog/rackspace/models/files/directories.rb +1 -7
  75. data/lib/fog/rackspace/models/servers/flavors.rb +1 -7
  76. data/lib/fog/rackspace/models/servers/images.rb +1 -9
  77. data/lib/fog/rackspace/models/servers/server.rb +37 -1
  78. data/lib/fog/rackspace/models/servers/servers.rb +8 -7
  79. data/lib/fog/rackspace/requests/files/put_object.rb +1 -1
  80. data/lib/fog/rackspace/servers.rb +33 -45
  81. data/lib/fog/service.rb +82 -0
  82. data/lib/fog/slicehost.rb +28 -42
  83. data/lib/fog/slicehost/models/flavors.rb +1 -7
  84. data/lib/fog/slicehost/models/images.rb +1 -9
  85. data/lib/fog/slicehost/models/servers.rb +1 -7
  86. data/lib/fog/ssh.rb +1 -1
  87. data/lib/fog/vcloud.rb +20 -3
  88. data/lib/fog/vcloud/collection.rb +25 -5
  89. data/lib/fog/vcloud/model.rb +4 -0
  90. data/lib/fog/vcloud/parsers/get_organization.rb +2 -2
  91. data/lib/fog/vcloud/parsers/get_vdc.rb +2 -2
  92. data/lib/fog/vcloud/parsers/get_versions.rb +1 -1
  93. data/lib/fog/vcloud/parsers/login.rb +2 -2
  94. data/lib/fog/vcloud/parsers/network.rb +53 -0
  95. data/lib/fog/vcloud/requests/get_network.rb +54 -0
  96. data/lib/fog/vcloud/requests/get_organization.rb +1 -2
  97. data/lib/fog/vcloud/terremark/ecloud.rb +17 -4
  98. data/lib/fog/vcloud/terremark/ecloud/models/internet_service.rb +35 -0
  99. data/lib/fog/vcloud/terremark/ecloud/models/internet_services.rb +9 -9
  100. data/lib/fog/vcloud/terremark/ecloud/models/ip.rb +18 -0
  101. data/lib/fog/vcloud/terremark/ecloud/models/ips.rb +36 -0
  102. data/lib/fog/vcloud/terremark/ecloud/models/network.rb +32 -0
  103. data/lib/fog/vcloud/terremark/ecloud/models/networks.rb +38 -0
  104. data/lib/fog/vcloud/terremark/ecloud/models/public_ip.rb +3 -1
  105. data/lib/fog/vcloud/terremark/ecloud/models/public_ips.rb +1 -1
  106. data/lib/fog/vcloud/terremark/ecloud/models/vdc.rb +9 -0
  107. data/lib/fog/vcloud/terremark/ecloud/models/vdcs.rb +2 -0
  108. data/lib/fog/vcloud/terremark/ecloud/parsers/network.rb +28 -0
  109. data/lib/fog/vcloud/terremark/ecloud/parsers/network_ips.rb +31 -0
  110. data/lib/fog/vcloud/terremark/ecloud/requests/add_internet_service.rb +10 -7
  111. data/lib/fog/vcloud/terremark/ecloud/requests/configure_internet_service.rb +99 -0
  112. data/lib/fog/vcloud/terremark/ecloud/requests/get_network.rb +54 -0
  113. data/lib/fog/vcloud/terremark/ecloud/requests/get_network_ips.rb +51 -0
  114. data/spec/aws/models/s3/file_spec.rb +15 -0
  115. data/spec/vcloud/requests/get_network_spec.rb +55 -0
  116. data/spec/vcloud/spec_helper.rb +1 -0
  117. data/spec/vcloud/terremark/ecloud/models/internet_service_spec.rb +15 -0
  118. data/spec/vcloud/terremark/ecloud/models/ip_spec.rb +35 -0
  119. data/spec/vcloud/terremark/ecloud/models/ips_spec.rb +28 -0
  120. data/spec/vcloud/terremark/ecloud/models/network_spec.rb +65 -0
  121. data/spec/vcloud/terremark/ecloud/models/networks_spec.rb +26 -0
  122. data/spec/vcloud/terremark/ecloud/models/public_ip_spec.rb +0 -2
  123. data/spec/vcloud/terremark/ecloud/requests/configure_internet_service_spec.rb +44 -0
  124. data/spec/vcloud/terremark/ecloud/requests/get_network_ips_spec.rb +54 -0
  125. data/spec/vcloud/terremark/ecloud/requests/get_network_spec.rb +63 -0
  126. data/tests/aws/requests/ec2/volume_tests.rb +2 -2
  127. data/tests/helper.rb +2 -0
  128. metadata +25 -3
data/Gemfile CHANGED
@@ -7,7 +7,7 @@ gem 'json', ">= 0"
7
7
  gem 'mime-types', ">= 0"
8
8
  gem 'net-ssh', ">= 0"
9
9
  gem 'nokogiri', ">= 0"
10
- gem 'ruby-hmac', ">= 0"
11
10
  gem 'rspec', '>= 0'
12
- gem 'shindo', '>= 0.1.4'
11
+ gem 'ruby-hmac', '>= 0'
12
+ gem 'shindo', '>= 0.1.5'
13
13
  gem 'builder', '>= 0'
@@ -8,7 +8,7 @@ dependencies:
8
8
  group:
9
9
  - :default
10
10
  version: ">= 0"
11
- rspec:
11
+ ruby-hmac:
12
12
  group:
13
13
  - :default
14
14
  version: ">= 0"
@@ -16,7 +16,7 @@ dependencies:
16
16
  group:
17
17
  - :default
18
18
  version: ">= 0"
19
- ruby-hmac:
19
+ rspec:
20
20
  group:
21
21
  - :default
22
22
  version: ">= 0"
@@ -39,7 +39,7 @@ dependencies:
39
39
  shindo:
40
40
  group:
41
41
  - :default
42
- version: ">= 0.1.4"
42
+ version: ">= 0.1.5"
43
43
  nokogiri:
44
44
  group:
45
45
  - :default
@@ -68,8 +68,8 @@ specs:
68
68
  - ruby-hmac:
69
69
  version: 0.4.0
70
70
  - shindo:
71
- version: 0.1.4
72
- hash: da3f548f91388bc9e002c42ee2a4488bc8db9991
71
+ version: 0.1.5
72
+ hash: 12012795f07111bf764cef89d9ba91f521c54956
73
73
  sources:
74
74
  - Rubygems:
75
75
  uri: http://gemcutter.org
@@ -1,6 +1,6 @@
1
1
  http://geemus.com/fog.png
2
2
 
3
- fog helps you interact with cloud services.
3
+ fog is the Ruby cloud computing library.
4
4
 
5
5
  The quick and dirty, top to bottom:
6
6
  * Models provide a simplified interface, making clouds easier to work with and switch between.
@@ -25,21 +25,21 @@ Now just type 'fog' to trying stuff out, confident that fog should let you know
25
25
  == Collections
26
26
 
27
27
  Nouns like Images and Servers are collections, which form the interface to the cloud.
28
- Collections provide all, create, get and new methods.
29
- * all fetches every object of that type from the cloud.
30
- * create initializes a new record locally and then persists it to the cloud.
31
- * get fetches a single object by its identity.
32
- * new initializes a new record locally.
28
+ Some of these collections are shared across multiple providers.
29
+ The shared collections for compute resources are flavors, images and servers.
30
+ Shared collections for storage are directory and file.
33
31
 
34
- Common compute nouns are flavors, images and servers.
32
+ Some common methods for all of these collections are:
33
+ * #all - fetch every object of that type from the provider.
34
+ * #create initialize a new record locally and then persists it with the provider.
35
+ * #get - fetch a single object by its identity from the provider.
36
+ * #new - initialize a new record locally, but do not persist it to the provider.
35
37
 
36
- Common storage nouns are directory and file.
37
-
38
- As an example, we'll try initializing and persisting a rackspace server:
38
+ As an example, we'll try initializing and persisting a Rackspace Cloud server:
39
39
 
40
40
  require 'fog'
41
41
 
42
- # initialize a connection to Rackspace Servers
42
+ # initialize a connection to Rackspace Cloud Servers
43
43
  connection = Fog::Rackspace::Servers.new(
44
44
  :rackspace_api_key => key,
45
45
  :rackspace_username => username
@@ -59,47 +59,47 @@ As an example, we'll try initializing and persisting a rackspace server:
59
59
  == Models
60
60
 
61
61
  Many of the collection methods return individual objects, which provide destroy, save and wait_for methods.
62
- * destroy will destroy the persisted object from the cloud
63
- * save will persist the object to the cloud
64
- * wait_for takes a block and waits for either the block to return true for the object or for a timeout (defaults to 10 minutes)
62
+ * #destroy - will destroy the persisted object from the provider
63
+ * #save - persist the object to the provider
64
+ * #wait_for - takes a block and waits for either the block to return true for the object or for a timeout (defaults to 10 minutes)
65
65
 
66
66
  == Mocks
67
67
 
68
- Mocking provides an in memory representation of clouds as you make different requests.
69
- This representation allows subsequent calls to mimic the behavior of the cloud while eliminating the cost and time needed to actually run tests against various providers.
70
- Mocking is easy to use, just write any functions as you normally would and then in your tests ensure you call:
68
+ Mocking provides an in memory representation of the state of cloud resources as you make requests.
69
+ Mocked calls to mimic the behavior of each provider while eliminating the cost and time needed to actually use cloud resources.
70
+ Enabling mocking easy to use, before you run any other commands run:
71
71
 
72
72
  Fog.mock!
73
73
 
74
- Make sure you call it first (before you initialize any connections) and all your calls should now run in mock mode.
75
- If you run into the edges of mock implementation it should let you know that they haven't been implemented yet.
74
+ Then you can run other commands just like you always would.
75
+ Some mocks are not implemented just yet, but fog will raise an error to let you know and contributions are always welcome!
76
76
 
77
77
  == Requests
78
78
 
79
79
  Requests allow you to dive deeper when the models just can't cut it.
80
- For instance, ec2 provides methods related to reserved instances that don't have any models (yet anyway).
81
- You can get a description of your reserved instances like this:
80
+ For instance, ec2 provides methods related to reserved instances that don't have any models (yet).
81
+ Here is how you can lookup your reserved instances:
82
82
 
83
83
  $ fog
84
84
  >> AWS[:ec2].describe_reserved_instances
85
85
  #<Excon::Response [...]>
86
86
 
87
- It will return an excon response, which has headers and body methods. Both give nice ruby hash representations of the result.
87
+ It will return an {excon}[http://github.com/geemus/excon] response, which has #headers and #body. Both return nice hashes.
88
88
 
89
89
  == Go forth and conquer
90
90
 
91
- That should give you some stuff to try and places to look.
92
- For a more in depth walk through, check out the {getting started guide}[http://wiki.github.com/geemus/fog/getting-started-with-fog].
91
+ Play around and use the console to explore or check out the {getting started guide}[http://wiki.github.com/geemus/fog/getting-started-with-fog] for more details.
93
92
 
94
93
  You should try out the (varying) support fog has for:
95
- * AWS [EC2, S3, SimpleDB]
96
- * Rackspace [Files, Servers]
97
- * Slicehost
98
- * Terremark vCloud Express
99
- * Blue Box Group [Blocks]
94
+ * {AWS}[http://aws.amazon.com] [{EC2}[http://aws.amazon.com/ec2], {ELB}[http://aws.amazon.com/elasticloadbalancing], {S3}[http://aws.amazon.com/s3], {SimpleDB}[http://aws.amazon.com/simpledb]]
95
+ * {Rackspace}[http://www.rackspace.com] [{Files}[http://www.rackspacecloud.com/cloud_hosting_products/files], {Servers}[http://www.rackspacecloud.com/cloud_hosting_products/servers]]
96
+ * {Slicehost}[http://www.slicehost.com]
97
+ * {Terremark}[http://www.terremark.com] [{vCloud Express}[http://vcloudexpress.terremark.com]]
98
+ * {Blue Box Group}[http://www.blueboxgrp.com] [{Blocks}[http://www.blueboxgrp.com/blocks]]
100
99
 
101
100
  Enjoy, and let me know what I can do to continue improving fog!
102
101
 
102
+ * Work for {twitter}[http://twitter.com]? I'd love to reclaim the unused {@fog}[http://twitter.com/fog] account!
103
103
  * Follow {@geemus}[http://twitter.com/geemus] on Twitter.
104
104
  * See upcoming work in the {tracker}[http://www.pivotaltracker.com/projects/54635].
105
105
  * Report bugs in {issues}[http://github.com/geemus/fog/issues].
@@ -7,8 +7,8 @@ Gem::Specification.new do |s|
7
7
  ## If your rubyforge_project name is different, then edit it and comment out
8
8
  ## the sub! line in the Rakefile
9
9
  s.name = 'fog'
10
- s.version = '0.1.8'
11
- s.date = '2010-06-07'
10
+ s.version = '0.1.9'
11
+ s.date = '2010-06-15'
12
12
  s.rubyforge_project = 'fog'
13
13
 
14
14
  ## Make sure your summary is short. The description may be as long
@@ -233,6 +233,8 @@ Gem::Specification.new do |s|
233
233
  lib/fog/connection.rb
234
234
  lib/fog/credentials.rb
235
235
  lib/fog/deprecation.rb
236
+ lib/fog/errors.rb
237
+ lib/fog/hmac.rb
236
238
  lib/fog/local.rb
237
239
  lib/fog/local/bin.rb
238
240
  lib/fog/local/models/directories.rb
@@ -283,6 +285,7 @@ Gem::Specification.new do |s|
283
285
  lib/fog/rackspace/requests/servers/reboot_server.rb
284
286
  lib/fog/rackspace/requests/servers/update_server.rb
285
287
  lib/fog/rackspace/servers.rb
288
+ lib/fog/service.rb
286
289
  lib/fog/slicehost.rb
287
290
  lib/fog/slicehost/bin.rb
288
291
  lib/fog/slicehost/models/flavor.rb
@@ -383,6 +386,8 @@ Gem::Specification.new do |s|
383
386
  lib/fog/vcloud/parsers/get_vdc.rb
384
387
  lib/fog/vcloud/parsers/get_versions.rb
385
388
  lib/fog/vcloud/parsers/login.rb
389
+ lib/fog/vcloud/parsers/network.rb
390
+ lib/fog/vcloud/requests/get_network.rb
386
391
  lib/fog/vcloud/requests/get_organization.rb
387
392
  lib/fog/vcloud/requests/get_vdc.rb
388
393
  lib/fog/vcloud/requests/get_versions.rb
@@ -391,6 +396,10 @@ Gem::Specification.new do |s|
391
396
  lib/fog/vcloud/terremark/ecloud.rb
392
397
  lib/fog/vcloud/terremark/ecloud/models/internet_service.rb
393
398
  lib/fog/vcloud/terremark/ecloud/models/internet_services.rb
399
+ lib/fog/vcloud/terremark/ecloud/models/ip.rb
400
+ lib/fog/vcloud/terremark/ecloud/models/ips.rb
401
+ lib/fog/vcloud/terremark/ecloud/models/network.rb
402
+ lib/fog/vcloud/terremark/ecloud/models/networks.rb
394
403
  lib/fog/vcloud/terremark/ecloud/models/public_ip.rb
395
404
  lib/fog/vcloud/terremark/ecloud/models/public_ips.rb
396
405
  lib/fog/vcloud/terremark/ecloud/models/vdc.rb
@@ -400,9 +409,14 @@ Gem::Specification.new do |s|
400
409
  lib/fog/vcloud/terremark/ecloud/parsers/get_public_ips.rb
401
410
  lib/fog/vcloud/terremark/ecloud/parsers/get_vdc.rb
402
411
  lib/fog/vcloud/terremark/ecloud/parsers/internet_service.rb
412
+ lib/fog/vcloud/terremark/ecloud/parsers/network.rb
413
+ lib/fog/vcloud/terremark/ecloud/parsers/network_ips.rb
403
414
  lib/fog/vcloud/terremark/ecloud/requests/add_internet_service.rb
415
+ lib/fog/vcloud/terremark/ecloud/requests/configure_internet_service.rb
404
416
  lib/fog/vcloud/terremark/ecloud/requests/delete_internet_service.rb
405
417
  lib/fog/vcloud/terremark/ecloud/requests/get_internet_services.rb
418
+ lib/fog/vcloud/terremark/ecloud/requests/get_network.rb
419
+ lib/fog/vcloud/terremark/ecloud/requests/get_network_ips.rb
406
420
  lib/fog/vcloud/terremark/ecloud/requests/get_public_ip.rb
407
421
  lib/fog/vcloud/terremark/ecloud/requests/get_public_ips.rb
408
422
  lib/fog/vcloud/terremark/ecloud/requests/get_vdc.rb
@@ -477,6 +491,7 @@ Gem::Specification.new do |s|
477
491
  spec/vcloud/bin_spec.rb
478
492
  spec/vcloud/models/vdc_spec.rb
479
493
  spec/vcloud/models/vdcs_spec.rb
494
+ spec/vcloud/requests/get_network_spec.rb
480
495
  spec/vcloud/requests/get_organization_spec.rb
481
496
  spec/vcloud/requests/get_vdc_spec.rb
482
497
  spec/vcloud/requests/get_versions_spec.rb
@@ -484,13 +499,20 @@ Gem::Specification.new do |s|
484
499
  spec/vcloud/spec_helper.rb
485
500
  spec/vcloud/terremark/ecloud/models/internet_service_spec.rb
486
501
  spec/vcloud/terremark/ecloud/models/internet_services_spec.rb
502
+ spec/vcloud/terremark/ecloud/models/ip_spec.rb
503
+ spec/vcloud/terremark/ecloud/models/ips_spec.rb
504
+ spec/vcloud/terremark/ecloud/models/network_spec.rb
505
+ spec/vcloud/terremark/ecloud/models/networks_spec.rb
487
506
  spec/vcloud/terremark/ecloud/models/public_ip_spec.rb
488
507
  spec/vcloud/terremark/ecloud/models/public_ips_spec.rb
489
508
  spec/vcloud/terremark/ecloud/models/vdc_spec.rb
490
509
  spec/vcloud/terremark/ecloud/models/vdcs_spec.rb
491
510
  spec/vcloud/terremark/ecloud/requests/add_internet_service_spec.rb
511
+ spec/vcloud/terremark/ecloud/requests/configure_internet_service_spec.rb
492
512
  spec/vcloud/terremark/ecloud/requests/delete_internet_service_spec.rb
493
513
  spec/vcloud/terremark/ecloud/requests/get_internet_services_spec.rb
514
+ spec/vcloud/terremark/ecloud/requests/get_network_ips_spec.rb
515
+ spec/vcloud/terremark/ecloud/requests/get_network_spec.rb
494
516
  spec/vcloud/terremark/ecloud/requests/get_public_ip_spec.rb
495
517
  spec/vcloud/terremark/ecloud/requests/get_public_ips_spec.rb
496
518
  spec/vcloud/terremark/ecloud/requests/get_vdc_spec.rb
data/lib/fog.rb CHANGED
@@ -4,8 +4,6 @@ require 'cgi'
4
4
  require 'digest/md5'
5
5
  require 'excon'
6
6
  require 'formatador'
7
- require 'hmac-sha1'
8
- require 'hmac-sha2'
9
7
  require 'json'
10
8
  require 'mime/types'
11
9
  require 'net/ssh'
@@ -22,22 +20,13 @@ require 'fog/attributes'
22
20
  require 'fog/collection'
23
21
  require 'fog/connection'
24
22
  require 'fog/deprecation'
23
+ require 'fog/errors'
24
+ require 'fog/hmac'
25
25
  require 'fog/model'
26
26
  require 'fog/parser'
27
+ require 'fog/service'
27
28
  require 'fog/ssh'
28
29
 
29
- module Fog
30
- module Errors
31
-
32
- class Error < StandardError; end
33
-
34
- class MockNotImplemented < Fog::Errors::Error; end
35
-
36
- class NotFound < Fog::Errors::Error; end
37
-
38
- end
39
- end
40
-
41
30
  require 'fog/aws'
42
31
  require 'fog/bluebox'
43
32
  require 'fog/local'
@@ -49,7 +38,7 @@ require 'fog/vcloud'
49
38
  module Fog
50
39
 
51
40
  unless const_defined?(:VERSION)
52
- VERSION = '0.1.8'
41
+ VERSION = '0.1.9'
53
42
  end
54
43
 
55
44
  module Mock
@@ -33,8 +33,8 @@ module Fog
33
33
  end
34
34
  end
35
35
  string_to_sign = "POST\n#{options[:host]}\n/\n" << body.chop
36
- hmac = options[:hmac].update(string_to_sign)
37
- body << "Signature=#{CGI.escape(Base64.encode64(hmac.digest).chomp!).gsub(/\+/, '%20')}"
36
+ signed_string = options[:hmac].sign(string_to_sign)
37
+ body << "Signature=#{CGI.escape(Base64.encode64(signed_string).chomp!).gsub(/\+/, '%20')}"
38
38
 
39
39
  body
40
40
  end
@@ -1,101 +1,65 @@
1
1
  module Fog
2
2
  module AWS
3
3
  module EC2
4
-
5
- class Error < Fog::Errors::Error; end
6
- class NotFound < Fog::Errors::NotFound; end
7
-
8
- def self.new(options={})
9
-
10
- unless @required
11
- require 'fog/aws/models/ec2/address'
12
- require 'fog/aws/models/ec2/addresses'
13
- require 'fog/aws/models/ec2/flavor'
14
- require 'fog/aws/models/ec2/flavors'
15
- require 'fog/aws/models/ec2/image'
16
- require 'fog/aws/models/ec2/images'
17
- require 'fog/aws/models/ec2/key_pair'
18
- require 'fog/aws/models/ec2/key_pairs'
19
- require 'fog/aws/models/ec2/security_group'
20
- require 'fog/aws/models/ec2/security_groups'
21
- require 'fog/aws/models/ec2/server'
22
- require 'fog/aws/models/ec2/servers'
23
- require 'fog/aws/models/ec2/snapshot'
24
- require 'fog/aws/models/ec2/snapshots'
25
- require 'fog/aws/models/ec2/volume'
26
- require 'fog/aws/models/ec2/volumes'
27
- require 'fog/aws/parsers/ec2/allocate_address'
28
- require 'fog/aws/parsers/ec2/attach_volume'
29
- require 'fog/aws/parsers/ec2/basic'
30
- require 'fog/aws/parsers/ec2/create_key_pair'
31
- require 'fog/aws/parsers/ec2/create_snapshot'
32
- require 'fog/aws/parsers/ec2/create_volume'
33
- require 'fog/aws/parsers/ec2/describe_addresses'
34
- require 'fog/aws/parsers/ec2/describe_availability_zones'
35
- require 'fog/aws/parsers/ec2/describe_images'
36
- require 'fog/aws/parsers/ec2/describe_instances'
37
- require 'fog/aws/parsers/ec2/describe_key_pairs'
38
- require 'fog/aws/parsers/ec2/describe_regions'
39
- require 'fog/aws/parsers/ec2/describe_reserved_instances'
40
- require 'fog/aws/parsers/ec2/describe_security_groups'
41
- require 'fog/aws/parsers/ec2/describe_snapshots'
42
- require 'fog/aws/parsers/ec2/describe_volumes'
43
- require 'fog/aws/parsers/ec2/detach_volume'
44
- require 'fog/aws/parsers/ec2/get_console_output'
45
- require 'fog/aws/parsers/ec2/run_instances'
46
- require 'fog/aws/parsers/ec2/terminate_instances'
47
- require 'fog/aws/requests/ec2/allocate_address'
48
- require 'fog/aws/requests/ec2/associate_address'
49
- require 'fog/aws/requests/ec2/attach_volume'
50
- require 'fog/aws/requests/ec2/authorize_security_group_ingress'
51
- require 'fog/aws/requests/ec2/create_key_pair'
52
- require 'fog/aws/requests/ec2/create_security_group'
53
- require 'fog/aws/requests/ec2/create_snapshot'
54
- require 'fog/aws/requests/ec2/create_volume'
55
- require 'fog/aws/requests/ec2/delete_key_pair'
56
- require 'fog/aws/requests/ec2/delete_security_group'
57
- require 'fog/aws/requests/ec2/delete_snapshot'
58
- require 'fog/aws/requests/ec2/delete_volume'
59
- require 'fog/aws/requests/ec2/describe_addresses'
60
- require 'fog/aws/requests/ec2/describe_availability_zones'
61
- require 'fog/aws/requests/ec2/describe_images'
62
- require 'fog/aws/requests/ec2/describe_instances'
63
- require 'fog/aws/requests/ec2/describe_reserved_instances'
64
- require 'fog/aws/requests/ec2/describe_key_pairs'
65
- require 'fog/aws/requests/ec2/describe_regions'
66
- require 'fog/aws/requests/ec2/describe_security_groups'
67
- require 'fog/aws/requests/ec2/describe_snapshots'
68
- require 'fog/aws/requests/ec2/describe_volumes'
69
- require 'fog/aws/requests/ec2/detach_volume'
70
- require 'fog/aws/requests/ec2/disassociate_address'
71
- require 'fog/aws/requests/ec2/get_console_output'
72
- require 'fog/aws/requests/ec2/modify_image_attributes'
73
- require 'fog/aws/requests/ec2/reboot_instances'
74
- require 'fog/aws/requests/ec2/release_address'
75
- require 'fog/aws/requests/ec2/revoke_security_group_ingress'
76
- require 'fog/aws/requests/ec2/run_instances'
77
- require 'fog/aws/requests/ec2/terminate_instances'
78
- @required = true
79
- end
80
-
81
- unless options[:aws_access_key_id]
82
- raise ArgumentError.new('aws_access_key_id is required to access ec2')
83
- end
84
- unless options[:aws_secret_access_key]
85
- raise ArgumentError.new('aws_secret_access_key is required to access ec2')
86
- end
87
- if Fog.mocking?
88
- Fog::AWS::EC2::Mock.new(options)
89
- else
90
- Fog::AWS::EC2::Real.new(options)
91
- end
92
- end
93
-
94
- def self.reset_data(keys=Mock.data.keys)
95
- Mock.reset_data(keys)
96
- end
4
+ extend Fog::Service
5
+
6
+ requires :aws_access_key_id, :aws_secret_access_key
7
+
8
+ model_path 'fog/aws/models/ec2'
9
+ model 'address'
10
+ model 'addresses'
11
+ model 'flavor'
12
+ model 'flavors'
13
+ model 'image'
14
+ model 'images'
15
+ model 'key_pair'
16
+ model 'key_pairs'
17
+ model 'security_group'
18
+ model 'security_groups'
19
+ model 'server'
20
+ model 'servers'
21
+ model 'snapshot'
22
+ model 'snapshots'
23
+ model 'volume'
24
+ model 'volumes'
25
+
26
+ require 'fog/aws/parsers/ec2/basic'
27
+
28
+ request_path 'fog/aws/requests/ec2'
29
+ request 'allocate_address'
30
+ request 'associate_address'
31
+ request 'attach_volume'
32
+ request 'authorize_security_group_ingress'
33
+ request 'create_key_pair'
34
+ request 'create_security_group'
35
+ request 'create_snapshot'
36
+ request 'create_volume'
37
+ request 'delete_key_pair'
38
+ request 'delete_security_group'
39
+ request 'delete_snapshot'
40
+ request 'delete_volume'
41
+ request 'describe_addresses'
42
+ request 'describe_availability_zones'
43
+ request 'describe_images'
44
+ request 'describe_instances'
45
+ request 'describe_reserved_instances'
46
+ request 'describe_key_pairs'
47
+ request 'describe_regions'
48
+ request 'describe_security_groups'
49
+ request 'describe_snapshots'
50
+ request 'describe_volumes'
51
+ request 'detach_volume'
52
+ request 'disassociate_address'
53
+ request 'get_console_output'
54
+ request 'modify_image_attributes'
55
+ request 'reboot_instances'
56
+ request 'release_address'
57
+ request 'revoke_security_group_ingress'
58
+ request 'run_instances'
59
+ request 'terminate_instances'
97
60
 
98
61
  class Mock
62
+ include Collections
99
63
 
100
64
  def self.data
101
65
  @data ||= Hash.new do |hash, key|
@@ -158,6 +122,7 @@ module Fog
158
122
  end
159
123
 
160
124
  class Real
125
+ include Collections
161
126
 
162
127
  # Initialize connection to EC2
163
128
  #
@@ -180,7 +145,7 @@ module Fog
180
145
  def initialize(options={})
181
146
  @aws_access_key_id = options[:aws_access_key_id]
182
147
  @aws_secret_access_key = options[:aws_secret_access_key]
183
- @hmac = HMAC::SHA256.new(@aws_secret_access_key)
148
+ @hmac = Fog::HMAC.new('sha256', @aws_secret_access_key)
184
149
  @host = options[:host] || case options[:region]
185
150
  when 'ap-southeast-1'
186
151
  'ec2.ap-southeast-1.amazonaws.com'
@@ -193,8 +158,8 @@ module Fog
193
158
  else
194
159
  'ec2.amazonaws.com'
195
160
  end
196
- @port = options[:port] || 443
197
- @scheme = options[:scheme] || 'https'
161
+ @port = options[:port] || 443
162
+ @scheme = options[:scheme] || 'https'
198
163
  end
199
164
 
200
165
  private
@@ -227,14 +192,12 @@ module Fog
227
192
  })
228
193
  rescue Excon::Errors::Error => error
229
194
  if match = error.message.match(/<Code>(.*)<\/Code><Message>(.*)<\/Message>/)
230
- new_error = case match[1].split('.').last
195
+ raise case match[1].split('.').last
231
196
  when 'NotFound'
232
- Fog::AWS::EC2::NotFound.new(match[2])
197
+ Fog::AWS::EC2::NotFound.slurp(error, match[2])
233
198
  else
234
- Fog::AWS::EC2::Error.new("#{match[1]} => #{match[2]}")
199
+ Fog::AWS::EC2::Error.slurp(error, "#{match[1]} => #{match[2]}")
235
200
  end
236
- new_error.set_backtrace(error.backtrace)
237
- raise new_error
238
201
  else
239
202
  raise error
240
203
  end