fog 1.4.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (236) hide show
  1. data/.document +1 -1
  2. data/.irbrc +5 -10
  3. data/{README.rdoc → README.md} +66 -61
  4. data/Rakefile +4 -6
  5. data/changelog.txt +491 -0
  6. data/docs/about/users.markdown +1 -0
  7. data/fog.gemspec +4 -4
  8. data/lib/fog.rb +1 -1
  9. data/lib/fog/aws.rb +4 -0
  10. data/lib/fog/aws/auto_scaling.rb +3 -0
  11. data/lib/fog/aws/cloud_watch.rb +28 -0
  12. data/lib/fog/aws/compute.rb +7 -1
  13. data/lib/fog/aws/elasticache.rb +64 -6
  14. data/lib/fog/aws/models/auto_scaling/configuration.rb +3 -1
  15. data/lib/fog/aws/models/auto_scaling/group.rb +10 -9
  16. data/lib/fog/aws/models/auto_scaling/policies.rb +33 -0
  17. data/lib/fog/aws/models/auto_scaling/policy.rb +46 -0
  18. data/lib/fog/aws/models/cloud_watch/alarm.rb +50 -2
  19. data/lib/fog/aws/models/cloud_watch/alarms.rb +18 -1
  20. data/lib/fog/aws/models/compute/address.rb +2 -2
  21. data/lib/fog/aws/models/dns/records.rb +5 -0
  22. data/lib/fog/aws/models/elasticache/cluster.rb +1 -1
  23. data/lib/fog/aws/models/iam/users.rb +26 -4
  24. data/lib/fog/aws/parsers/auto_scaling/describe_policies.rb +7 -5
  25. data/lib/fog/aws/parsers/elb/describe_load_balancers.rb +1 -1
  26. data/lib/fog/aws/rds.rb +1 -1
  27. data/lib/fog/aws/requests/auto_scaling/create_auto_scaling_group.rb +8 -0
  28. data/lib/fog/aws/requests/auto_scaling/create_launch_configuration.rb +1 -2
  29. data/lib/fog/aws/requests/auto_scaling/delete_auto_scaling_group.rb +10 -2
  30. data/lib/fog/aws/requests/auto_scaling/delete_launch_configuration.rb +1 -1
  31. data/lib/fog/aws/requests/auto_scaling/delete_policy.rb +10 -1
  32. data/lib/fog/aws/requests/auto_scaling/describe_auto_scaling_instances.rb +0 -1
  33. data/lib/fog/aws/requests/auto_scaling/describe_policies.rb +13 -1
  34. data/lib/fog/aws/requests/auto_scaling/put_scaling_policy.rb +20 -1
  35. data/lib/fog/aws/requests/auto_scaling/update_auto_scaling_group.rb +1 -1
  36. data/lib/fog/aws/requests/cloud_watch/delete_alarms.rb +19 -1
  37. data/lib/fog/aws/requests/cloud_watch/describe_alarms.rb +20 -2
  38. data/lib/fog/aws/requests/cloud_watch/put_metric_alarm.rb +9 -0
  39. data/lib/fog/aws/requests/compute/allocate_address.rb +4 -5
  40. data/lib/fog/aws/requests/compute/create_dhcp_options.rb +6 -5
  41. data/lib/fog/aws/requests/compute/create_internet_gateway.rb +7 -6
  42. data/lib/fog/aws/requests/compute/create_subnet.rb +11 -10
  43. data/lib/fog/aws/requests/compute/create_vpc.rb +8 -7
  44. data/lib/fog/aws/requests/compute/delete_dhcp_options.rb +1 -0
  45. data/lib/fog/aws/requests/compute/delete_internet_gateway.rb +1 -0
  46. data/lib/fog/aws/requests/compute/delete_subnet.rb +1 -0
  47. data/lib/fog/aws/requests/compute/delete_vpc.rb +2 -1
  48. data/lib/fog/aws/requests/compute/describe_availability_zones.rb +1 -0
  49. data/lib/fog/aws/requests/compute/describe_dhcp_options.rb +1 -8
  50. data/lib/fog/aws/requests/compute/describe_instances.rb +3 -1
  51. data/lib/fog/aws/requests/compute/describe_internet_gateways.rb +1 -8
  52. data/lib/fog/aws/requests/compute/describe_subnets.rb +1 -9
  53. data/lib/fog/aws/requests/compute/describe_vpcs.rb +1 -8
  54. data/lib/fog/aws/requests/compute/release_address.rb +12 -4
  55. data/lib/fog/aws/requests/compute/start_instances.rb +1 -0
  56. data/lib/fog/aws/requests/compute/stop_instances.rb +1 -0
  57. data/lib/fog/aws/requests/elasticache/create_cache_cluster.rb +26 -2
  58. data/lib/fog/aws/requests/elasticache/delete_cache_cluster.rb +10 -1
  59. data/lib/fog/aws/requests/elasticache/describe_cache_clusters.rb +16 -1
  60. data/lib/fog/aws/requests/elasticache/modify_cache_cluster.rb +35 -3
  61. data/lib/fog/aws/requests/elasticache/reboot_cache_cluster.rb +10 -2
  62. data/lib/fog/aws/requests/elb/create_load_balancer.rb +1 -1
  63. data/lib/fog/aws/requests/rds/describe_db_instances.rb +3 -3
  64. data/lib/fog/aws/sqs.rb +1 -1
  65. data/lib/fog/aws/storage.rb +1 -1
  66. data/lib/fog/bin/rackspace.rb +4 -0
  67. data/lib/fog/cloudstack/compute.rb +25 -18
  68. data/lib/fog/cloudstack/models/compute/image.rb +34 -34
  69. data/lib/fog/cloudstack/models/compute/job.rb +14 -1
  70. data/lib/fog/cloudstack/models/compute/jobs.rb +1 -1
  71. data/lib/fog/cloudstack/models/compute/security_group.rb +50 -0
  72. data/lib/fog/cloudstack/models/compute/security_group_rule.rb +62 -0
  73. data/lib/fog/cloudstack/models/compute/security_group_rules.rb +37 -0
  74. data/lib/fog/cloudstack/models/compute/security_groups.rb +27 -0
  75. data/lib/fog/cloudstack/models/compute/server.rb +63 -39
  76. data/lib/fog/cloudstack/models/compute/volume.rb +3 -7
  77. data/lib/fog/cloudstack/models/compute/zone.rb +1 -2
  78. data/lib/fog/cloudstack/requests/compute/assign_virtual_machine.rb +18 -0
  79. data/lib/fog/cloudstack/requests/compute/authorize_security_group_egress.rb +68 -0
  80. data/lib/fog/cloudstack/requests/compute/authorize_security_group_ingress.rb +55 -4
  81. data/lib/fog/cloudstack/requests/compute/create_security_group.rb +12 -4
  82. data/lib/fog/cloudstack/requests/compute/create_zone.rb +20 -0
  83. data/lib/fog/cloudstack/requests/compute/delete_security_group.rb +17 -0
  84. data/lib/fog/cloudstack/requests/compute/destroy_virtual_machine.rb +23 -1
  85. data/lib/fog/cloudstack/requests/compute/list_firewall_rules.rb +15 -0
  86. data/lib/fog/cloudstack/requests/compute/list_security_groups.rb +22 -4
  87. data/lib/fog/cloudstack/requests/compute/query_async_job_result.rb +15 -3
  88. data/lib/fog/cloudstack/requests/compute/revoke_security_group_egress.rb +42 -0
  89. data/lib/fog/cloudstack/requests/compute/revoke_security_group_ingress.rb +29 -3
  90. data/lib/fog/core.rb +1 -0
  91. data/lib/fog/core/attributes.rb +1 -1
  92. data/lib/fog/core/current_machine.rb +2 -2
  93. data/lib/fog/core/scp.rb +8 -0
  94. data/lib/fog/core/ssh.rb +8 -0
  95. data/lib/fog/dynect/dns.rb +14 -5
  96. data/lib/fog/ibm/requests/compute/create_instance.rb +1 -1
  97. data/lib/fog/libvirt/requests/compute/create_volume.rb +1 -1
  98. data/lib/fog/libvirt/requests/compute/list_volumes.rb +1 -1
  99. data/lib/fog/local/models/storage/file.rb +12 -1
  100. data/lib/fog/local/storage.rb +25 -1
  101. data/lib/fog/ninefold/compute.rb +1 -0
  102. data/lib/fog/openstack.rb +3 -1
  103. data/lib/fog/openstack/compute.rb +13 -2
  104. data/lib/fog/openstack/models/compute/servers.rb +10 -2
  105. data/lib/fog/openstack/requests/compute/create_flavor.rb +2 -2
  106. data/lib/fog/openstack/requests/compute/create_security_group.rb +1 -1
  107. data/lib/fog/openstack/requests/compute/create_server.rb +1 -1
  108. data/lib/fog/openstack/requests/compute/create_volume.rb +1 -1
  109. data/lib/fog/openstack/requests/compute/get_flavor_details.rb +7 -7
  110. data/lib/fog/openstack/requests/compute/get_quota.rb +1 -12
  111. data/lib/fog/openstack/requests/compute/get_quota_defaults.rb +1 -12
  112. data/lib/fog/openstack/requests/compute/get_volume_details.rb +1 -1
  113. data/lib/fog/openstack/requests/compute/list_flavors.rb +7 -7
  114. data/lib/fog/openstack/requests/compute/list_flavors_detail.rb +7 -7
  115. data/lib/fog/openstack/requests/compute/list_security_groups.rb +7 -7
  116. data/lib/fog/openstack/requests/compute/list_servers_detail.rb +4 -3
  117. data/lib/fog/openstack/requests/compute/list_volumes.rb +6 -8
  118. data/lib/fog/openstack/requests/compute/update_quota.rb +2 -15
  119. data/lib/fog/openstack/requests/identity/delete_role.rb +1 -1
  120. data/lib/fog/openstack/requests/identity/list_roles.rb +1 -1
  121. data/lib/fog/openstack/requests/image/create_image.rb +3 -1
  122. data/lib/fog/openstack/requests/image/list_public_images.rb +19 -1
  123. data/lib/fog/openstack/requests/image/list_public_images_detailed.rb +20 -2
  124. data/lib/fog/openstack/requests/image/update_image.rb +1 -1
  125. data/lib/fog/rackspace.rb +2 -0
  126. data/lib/fog/rackspace/databases.rb +121 -0
  127. data/lib/fog/rackspace/identity.rb +83 -0
  128. data/lib/fog/rackspace/load_balancers.rb +3 -0
  129. data/lib/fog/rackspace/models/databases/database.rb +32 -0
  130. data/lib/fog/rackspace/models/databases/databases.rb +31 -0
  131. data/lib/fog/rackspace/models/databases/flavor.rb +15 -0
  132. data/lib/fog/rackspace/models/databases/flavors.rb +25 -0
  133. data/lib/fog/rackspace/models/databases/instance.rb +104 -0
  134. data/lib/fog/rackspace/models/databases/instances.rb +25 -0
  135. data/lib/fog/rackspace/models/databases/user.rb +32 -0
  136. data/lib/fog/rackspace/models/databases/users.rb +31 -0
  137. data/lib/fog/rackspace/models/identity/credential.rb +13 -0
  138. data/lib/fog/rackspace/models/identity/credentials.rb +32 -0
  139. data/lib/fog/rackspace/models/identity/role.rb +14 -0
  140. data/lib/fog/rackspace/models/identity/roles.rb +32 -0
  141. data/lib/fog/rackspace/models/identity/tenant.rb +15 -0
  142. data/lib/fog/rackspace/models/identity/tenants.rb +28 -0
  143. data/lib/fog/rackspace/models/identity/user.rb +53 -0
  144. data/lib/fog/rackspace/models/identity/users.rb +36 -0
  145. data/lib/fog/rackspace/models/load_balancers/load_balancer.rb +17 -0
  146. data/lib/fog/rackspace/requests/databases/check_root_user.rb +15 -0
  147. data/lib/fog/rackspace/requests/databases/create_database.rb +24 -0
  148. data/lib/fog/rackspace/requests/databases/create_instance.rb +26 -0
  149. data/lib/fog/rackspace/requests/databases/create_user.rb +24 -0
  150. data/lib/fog/rackspace/requests/databases/delete_database.rb +15 -0
  151. data/lib/fog/rackspace/requests/databases/delete_instance.rb +15 -0
  152. data/lib/fog/rackspace/requests/databases/delete_user.rb +15 -0
  153. data/lib/fog/rackspace/requests/databases/enable_root_user.rb +15 -0
  154. data/lib/fog/rackspace/requests/databases/get_flavor.rb +15 -0
  155. data/lib/fog/rackspace/requests/databases/get_instance.rb +15 -0
  156. data/lib/fog/rackspace/requests/databases/list_databases.rb +15 -0
  157. data/lib/fog/rackspace/requests/databases/list_flavors.rb +15 -0
  158. data/lib/fog/rackspace/requests/databases/list_instances.rb +15 -0
  159. data/lib/fog/rackspace/requests/databases/list_users.rb +15 -0
  160. data/lib/fog/rackspace/requests/databases/resize_instance.rb +22 -0
  161. data/lib/fog/rackspace/requests/databases/resize_instance_volume.rb +24 -0
  162. data/lib/fog/rackspace/requests/databases/restart_instance.rb +20 -0
  163. data/lib/fog/rackspace/requests/identity/create_token.rb +25 -0
  164. data/lib/fog/rackspace/requests/identity/create_user.rb +25 -0
  165. data/lib/fog/rackspace/requests/identity/delete_user.rb +15 -0
  166. data/lib/fog/rackspace/requests/identity/get_credentials.rb +15 -0
  167. data/lib/fog/rackspace/requests/identity/get_user_by_id.rb +15 -0
  168. data/lib/fog/rackspace/requests/identity/get_user_by_name.rb +15 -0
  169. data/lib/fog/rackspace/requests/identity/list_credentials.rb +22 -0
  170. data/lib/fog/rackspace/requests/identity/list_tenants.rb +22 -0
  171. data/lib/fog/rackspace/requests/identity/list_user_roles.rb +22 -0
  172. data/lib/fog/rackspace/requests/identity/list_users.rb +22 -0
  173. data/lib/fog/rackspace/requests/identity/update_user.rb +24 -0
  174. data/lib/fog/rackspace/requests/load_balancers/get_ssl_termination.rb +15 -0
  175. data/lib/fog/rackspace/requests/load_balancers/remove_ssl_termination.rb +15 -0
  176. data/lib/fog/rackspace/requests/load_balancers/set_ssl_termination.rb +31 -0
  177. data/lib/fog/rackspace/storage.rb +1 -1
  178. data/lib/fog/vsphere/models/compute/server.rb +1 -0
  179. data/lib/fog/vsphere/requests/compute/vm_clone.rb +2 -2
  180. data/tests/aws/models/compute/address_tests.rb +2 -1
  181. data/tests/aws/models/compute/volume_tests.rb +1 -1
  182. data/tests/aws/models/dns/records_tests.rb +19 -1
  183. data/tests/aws/models/storage/directory_tests.rb +1 -1
  184. data/tests/aws/models/storage/url_tests.rb +7 -1
  185. data/tests/aws/requests/auto_scaling/auto_scaling_tests.rb +4 -2
  186. data/tests/aws/requests/compute/address_tests.rb +19 -1
  187. data/tests/aws/requests/elasticache/cache_cluster_tests.rb +4 -4
  188. data/tests/aws/requests/elb/helper.rb +13 -2
  189. data/tests/aws/requests/iam/access_key_tests.rb +1 -3
  190. data/tests/cloudstack/compute/models/security_group_rule_tests.rb +29 -0
  191. data/tests/cloudstack/compute/models/security_group_tests.rb +16 -0
  192. data/tests/cloudstack/compute/models/security_groups_tests.rb +19 -0
  193. data/tests/cloudstack/compute/models/server_tests.rb +18 -0
  194. data/tests/cloudstack/compute/models/volume_tests.rb +34 -0
  195. data/tests/cloudstack/compute/models/volumes_tests.rb +17 -0
  196. data/tests/compute/helper.rb +10 -3
  197. data/tests/core/current_machine_tests.rb +32 -0
  198. data/tests/helper.rb +1 -1
  199. data/tests/helpers/mock_helper.rb +3 -0
  200. data/tests/hp/requests/compute/address_tests.rb +2 -1
  201. data/tests/joyent/requests/compute/datasets_tests.rb +12 -3
  202. data/tests/local/models/file_tests.rb +43 -0
  203. data/tests/local/storage_tests.rb +40 -0
  204. data/tests/openstack/requests/compute/flavor_tests.rb +1 -1
  205. data/tests/openstack/requests/compute/server_tests.rb +3 -3
  206. data/tests/openstack/requests/compute/volume_tests.rb +1 -1
  207. data/tests/openstack/requests/identity/role_tests.rb +1 -1
  208. data/tests/rackspace/databases_tests.rb +26 -0
  209. data/tests/rackspace/models/databases/database_tests.rb +17 -0
  210. data/tests/rackspace/models/databases/databases_tests.rb +17 -0
  211. data/tests/rackspace/models/databases/flavors_tests.rb +20 -0
  212. data/tests/rackspace/models/databases/instance_tests.rb +43 -0
  213. data/tests/rackspace/models/databases/instances_tests.rb +14 -0
  214. data/tests/rackspace/models/databases/user_tests.rb +21 -0
  215. data/tests/rackspace/models/databases/users_tests.rb +21 -0
  216. data/tests/rackspace/models/identity/credentials_tests.rb +16 -0
  217. data/tests/rackspace/models/identity/roles_tests.rb +16 -0
  218. data/tests/rackspace/models/identity/tenants_tests.rb +21 -0
  219. data/tests/rackspace/models/identity/user_tests.rb +17 -0
  220. data/tests/rackspace/models/identity/users_tests.rb +17 -0
  221. data/tests/rackspace/models/load_balancers/load_balancer_tests.rb +20 -0
  222. data/tests/rackspace/requests/databases/database_tests.rb +36 -0
  223. data/tests/rackspace/requests/databases/flavor_tests.rb +16 -0
  224. data/tests/rackspace/requests/databases/helper.rb +84 -0
  225. data/tests/rackspace/requests/databases/instance_tests.rb +77 -0
  226. data/tests/rackspace/requests/databases/user_tests.rb +37 -0
  227. data/tests/rackspace/requests/identity/tenants_tests.rb +21 -0
  228. data/tests/rackspace/requests/identity/token_tests.rb +63 -0
  229. data/tests/rackspace/requests/identity/user_tests.rb +107 -0
  230. data/tests/rackspace/requests/load_balancers/helper.rb +70 -1
  231. data/tests/rackspace/requests/load_balancers/ssl_termination_tests.rb +38 -0
  232. data/tests/storage/models/file_tests.rb +1 -1
  233. metadata +129 -13
  234. data/spec/core/current_machine_spec.rb +0 -32
  235. data/spec/lib/fog/aws/parsers/sqs/receive_message_spec.rb +0 -58
  236. data/spec/spec_helper.rb +0 -8
@@ -28,6 +28,7 @@ Thanks for following these rules to keep the quality high and and the content us
28
28
  * [Engine Yard AppCloud](http://www.engineyard.com/cloud) = AWS => \[Compute, Storage\]
29
29
  * [iSwifter](http://iswifter.youwebinc.com/) = BlueBox => Compute
30
30
  * [OpenFeint](http://openfeint.com) = BlueBox => Compute
31
+ * [PeopleAdmin](http://www.peopleadmin.com) = AWS => [Compute, Storage]
31
32
  * [PHPFog](https://phpfog.com) = AWS => Compute
32
33
  * [RowFeeder](https://rowfeeder.com) = Blue Box Group => Compute
33
34
  * [Viximo](http://viximo.com) = AWS => Compute
data/fog.gemspec CHANGED
@@ -6,8 +6,8 @@ Gem::Specification.new do |s|
6
6
  ## If your rubyforge_project name is different, then edit it and comment out
7
7
  ## the sub! line in the Rakefile
8
8
  s.name = 'fog'
9
- s.version = '1.4.0'
10
- s.date = '2012-06-24'
9
+ s.version = '1.5.0'
10
+ s.date = '2012-07-28'
11
11
  s.rubyforge_project = 'fog'
12
12
 
13
13
 
@@ -37,12 +37,12 @@ Gem::Specification.new do |s|
37
37
  ## Specify any RDoc options here. You'll want to add your README and
38
38
  ## LICENSE files to the extra_rdoc_files list.
39
39
  s.rdoc_options = ["--charset=UTF-8"]
40
- s.extra_rdoc_files = %w[README.rdoc]
40
+ s.extra_rdoc_files = %w[README.md]
41
41
 
42
42
  ## List your runtime dependencies here. Runtime dependencies are those
43
43
  ## that are needed for an end user to actually USE your code.
44
44
  s.add_dependency('builder')
45
- s.add_dependency('excon', '~>0.14.0')
45
+ s.add_dependency('excon', '~>0.14')
46
46
  s.add_dependency('formatador', '~>0.2.0')
47
47
  s.add_dependency('multi_json', '~>1.0')
48
48
  s.add_dependency('mime-types')
data/lib/fog.rb CHANGED
@@ -3,7 +3,7 @@ require File.join(File.dirname(__FILE__), 'fog', 'core')
3
3
  module Fog
4
4
 
5
5
  unless const_defined?(:VERSION)
6
- VERSION = '1.4.0'
6
+ VERSION = '1.5.0'
7
7
  end
8
8
 
9
9
  end
data/lib/fog/aws.rb CHANGED
@@ -186,6 +186,10 @@ module Fog
186
186
  ip.join('.')
187
187
  end
188
188
 
189
+ def self.private_ip_address
190
+ ip_address.gsub(/^\d{1,3}\./,"10.")
191
+ end
192
+
189
193
  def self.kernel_id
190
194
  "aki-#{Fog::Mock.random_hex(8)}"
191
195
  end
@@ -50,6 +50,8 @@ module Fog
50
50
  collection :groups
51
51
  model :instance
52
52
  collection :instances
53
+ model :policy
54
+ collection :policies
53
55
 
54
56
  class Real
55
57
  include Fog::AWS::CredentialFetcher::ConnectionMethods
@@ -165,6 +167,7 @@ module Fog
165
167
  'PercentChangeInCapacity'
166
168
  ],
167
169
  :auto_scaling_groups => {},
170
+ :scaling_policies => {},
168
171
  :health_states => ['Healthy', 'Unhealthy'],
169
172
  :launch_configurations => {},
170
173
  :metric_collection_types => {
@@ -36,9 +36,37 @@ module Fog
36
36
 
37
37
  class Mock
38
38
 
39
+ def self.data
40
+ @data ||= Hash.new do |hash, region|
41
+ hash[region] = Hash.new do |region_hash, key|
42
+ region_hash[key] = {
43
+ :metric_alarms => {}
44
+ }
45
+ end
46
+ end
47
+ end
48
+
49
+ def self.reset
50
+ @data = nil
51
+ end
52
+
39
53
  def initialize(options={})
54
+ @aws_access_key_id = options[:aws_access_key_id]
55
+
56
+ @region = options[:region] || 'us-east-1'
57
+
58
+ unless ['ap-northeast-1', 'ap-southeast-1', 'eu-west-1', 'sa-east-1', 'us-east-1', 'us-west-1', 'us-west-2'].include?(@region)
59
+ raise ArgumentError, "Unknown region: #{@region.inspect}"
60
+ end
61
+ end
62
+
63
+ def data
64
+ self.class.data[@region][@aws_access_key_id]
40
65
  end
41
66
 
67
+ def reset_data
68
+ self.class.data[@region].delete(@aws_access_key_id)
69
+ end
42
70
  end
43
71
 
44
72
  class Real
@@ -138,6 +138,7 @@ module Fog
138
138
  end
139
139
 
140
140
  class Mock
141
+ include Fog::AWS::CredentialFetcher::ConnectionMethods
141
142
 
142
143
  def self.data
143
144
  @data ||= Hash.new do |hash, region|
@@ -197,7 +198,11 @@ module Fog
197
198
  :tags => {},
198
199
  :tag_sets => Hash.new do |tag_set_hash, resource_id|
199
200
  tag_set_hash[resource_id] = {}
200
- end
201
+ end,
202
+ :subnets => [],
203
+ :vpcs => [],
204
+ :dhcp_options => [],
205
+ :internet_gateways => []
201
206
  }
202
207
  end
203
208
  end
@@ -209,6 +214,7 @@ module Fog
209
214
 
210
215
  def initialize(options={})
211
216
  @use_iam_profile = options[:use_iam_profile]
217
+ @aws_credentials_expire_at = Time::now + 20
212
218
  setup_credentials(options)
213
219
  @region = options[:region] || 'us-east-1'
214
220
 
@@ -41,12 +41,6 @@ module Fog
41
41
  model :parameter_group
42
42
  collection :parameter_groups
43
43
 
44
- class Mock
45
- def initalize(options={})
46
- Fog::Mock.not_implemented
47
- end
48
- end
49
-
50
44
  class Real
51
45
  include Fog::AWS::CredentialFetcher::ConnectionMethods
52
46
  def initialize(options={})
@@ -129,6 +123,70 @@ module Fog
129
123
  end
130
124
 
131
125
  end
126
+
127
+ class Mock
128
+ include Fog::AWS::CredentialFetcher::ConnectionMethods
129
+
130
+ def self.data
131
+ @data ||= Hash.new do |hash, region|
132
+ hash[region] = Hash.new do |region_hash, key|
133
+ owner_id = Fog::AWS::Mock.owner_id
134
+ security_group_id = Fog::AWS::Mock.security_group_id
135
+ region_hash[key] = {
136
+ :clusters => {}, # cache cluster data, indexed by cluster ID
137
+ }
138
+ end
139
+ end
140
+ end
141
+
142
+ def self.reset
143
+ @data = nil
144
+ end
145
+
146
+ def initialize(options={})
147
+ @aws_credentials_expire_at = Time::now + 20
148
+ setup_credentials(options)
149
+ @region = options[:region] || 'us-east-1'
150
+ unless ['ap-northeast-1', 'ap-southeast-1', 'eu-west-1', 'us-east-1',
151
+ 'us-west-1', 'us-west-2', 'sa-east-1'].include?(@region)
152
+ raise ArgumentError, "Unknown region: #{@region.inspect}"
153
+ end
154
+ end
155
+
156
+ def region_data
157
+ self.class.data[@region]
158
+ end
159
+
160
+ def data
161
+ self.region_data[@aws_access_key_id]
162
+ end
163
+
164
+ def reset_data
165
+ self.region_data.delete(@aws_access_key_id)
166
+ end
167
+
168
+ def setup_credentials(options)
169
+ @aws_access_key_id = options[:aws_access_key_id]
170
+ end
171
+
172
+ # returns an Array of (Mock) elasticache nodes, representated as Hashes
173
+ def create_cache_nodes(cluster_id, num_nodes = 1, port = '11211')
174
+ (1..num_nodes).map do |node_number|
175
+ node_id = "%04d" % node_number
176
+ { # each hash represents a cache cluster node
177
+ "CacheNodeId" => node_id,
178
+ "Port" => port,
179
+ "ParameterGroupStatus" => "in-sync",
180
+ "CacheNodeStatus" => "available",
181
+ "CacheNodeCreateTime" => Time.now.utc.to_s,
182
+ "Address" =>
183
+ "#{cluster_id}.#{node_id}.use1.cache.amazonaws.com"
184
+ }
185
+ end
186
+ end
187
+ end
188
+
189
+
132
190
  end
133
191
  end
134
192
  end
@@ -39,7 +39,9 @@ module Fog
39
39
  requires :image_id
40
40
  requires :instance_type
41
41
 
42
- connection.create_launch_configuration(image_id, instance_type, id) #, listeners.map{|l| l.to_params})
42
+ options = Hash[self.class.aliases.map { |key, value| [key, send(value)] }]
43
+ options.delete_if { |key, value| value.nil? }
44
+ connection.create_launch_configuration(image_id, instance_type, id, options) #, listeners.map{|l| l.to_params})
43
45
 
44
46
  # reload instead of merge attributes b/c some attrs (like HealthCheck)
45
47
  # may be set, but only the DNS name is returned in the create_load_balance
@@ -4,7 +4,6 @@ module Fog
4
4
  module AWS
5
5
  class AutoScaling
6
6
  class Group < Fog::Model
7
-
8
7
  identity :id, :aliases => 'AutoScalingGroupName'
9
8
  attribute :arn, :aliases => 'AutoScalingGroupARN'
10
9
  attribute :availability_zones, :aliases => 'AvailabilityZones'
@@ -22,6 +21,7 @@ module Fog
22
21
  attribute :placement_group, :aliases => 'PlacementGroup'
23
22
  attribute :suspended_processes, :aliases => 'SuspendedProcesses'
24
23
  attribute :vpc_zone_identifier, :aliases => 'VPCZoneIdentifier'
24
+ attribute :tags, :aliases => 'Tags'
25
25
 
26
26
  def initialize(attributes={})
27
27
  attributes['DefaultCooldown'] ||= 0
@@ -34,6 +34,7 @@ module Fog
34
34
  attributes['MaxSize'] ||= 0
35
35
  attributes['MinSize'] ||= 0
36
36
  attributes['SuspendedProcesses'] ||= []
37
+ attributes['Tags'] ||= []
37
38
  super
38
39
  end
39
40
 
@@ -72,10 +73,7 @@ module Fog
72
73
  end
73
74
 
74
75
  def instances
75
- Fog::AWS::AutoScaling::Instances.new({
76
- :data => attributes['Instances'],
77
- :connection => connection
78
- })
76
+ Fog::AWS::AutoScaling::Instances.new(:connection => connection).load(attributes[:instance])
79
77
  end
80
78
 
81
79
  def instances_in_service
@@ -112,7 +110,7 @@ module Fog
112
110
  requires :max_size
113
111
  requires :min_size
114
112
 
115
- connection.create_auto_scaling_group(id, availability_zones, launch_configuration_name, max_size, min_size)
113
+ connection.create_auto_scaling_group(id, availability_zones, launch_configuration_name, max_size, min_size, options)
116
114
  reload
117
115
  end
118
116
 
@@ -126,14 +124,17 @@ module Fog
126
124
  connection.delete_auto_scaling_group(id)
127
125
  end
128
126
 
129
- private
130
-
131
- def update(options)
127
+ def update
132
128
  requires :id
133
129
  connection.update_auto_scaling_group(id, options)
134
130
  reload
135
131
  end
136
132
 
133
+ def options
134
+ ret = Hash[self.class.aliases.map { |key, value| [key, send(value)] }]
135
+ ret.delete_if { |key, value| value.nil? }
136
+ ret
137
+ end
137
138
  end
138
139
  end
139
140
  end
@@ -0,0 +1,33 @@
1
+ require 'fog/aws/models/auto_scaling/policy'
2
+
3
+ module Fog
4
+ module AWS
5
+ class AutoScaling
6
+ class Policies < Fog::Collection
7
+ model Fog::AWS::AutoScaling::Policy
8
+
9
+ # Creates a new scaling policy.
10
+ def initialize(attributes={})
11
+ super
12
+ end
13
+
14
+ def all
15
+ data = []
16
+ next_token = nil
17
+ loop do
18
+ result = connection.describe_policies('NextToken' => next_token).body['DescribePoliciesResult']
19
+ data += result['ScalingPolicies']
20
+ next_token = result['NextToken']
21
+ break if next_token.nil?
22
+ end
23
+ load(data)
24
+ end
25
+
26
+ def get(identity, auto_scaling_group = nil)
27
+ data = connection.describe_policies('PolicyNames' => identity, 'AutoScalingGroupName' => auto_scaling_group).body['DescribePoliciesResult']['ScalingPolicies'].first
28
+ new(data) unless data.nil?
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,46 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module AWS
5
+ class AutoScaling
6
+ class Policy < Fog::Model
7
+ identity :id, :aliases => 'PolicyName'
8
+ attribute :arn, :aliases => 'PolicyARN'
9
+ attribute :adjustment_type, :aliases => 'AdjustmentType'
10
+ attribute :alarms, :aliases => 'Alarms'
11
+ attribute :auto_scaling_group_name, :aliases => 'AutoScalingGroupName'
12
+ attribute :cooldown, :aliases => 'Cooldown'
13
+ attribute :min_adjustment_step, :aliases => 'MinAdjustmentStep'
14
+ attribute :scaling_adjustment, :aliases => 'ScalingAdjustment'
15
+
16
+ def initialize(attributes)
17
+ attributes['AdjustmentType'] ||= 'ChangeInCapacity'
18
+ attributes['ScalingAdjustment'] ||= 1
19
+ super
20
+ end
21
+
22
+ # TODO: implement #alarms
23
+ # TODO: implement #auto_scaling_group
24
+
25
+ def save
26
+ requires :id
27
+ requires :adjustment_type
28
+ requires :auto_scaling_group_name
29
+ requires :scaling_adjustment
30
+
31
+ options = Hash[self.class.aliases.map { |key, value| [key, send(value)] }]
32
+ options.delete_if { |key, value| value.nil? }
33
+
34
+ connection.put_scaling_policy(adjustment_type, auto_scaling_group_name, id, scaling_adjustment, options)
35
+ reload
36
+ end
37
+
38
+ def destroy
39
+ requires :id
40
+ requires :auto_scaling_group_name
41
+ connection.delete_policy(auto_scaling_group_name, id)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -3,9 +3,57 @@ require 'fog/core/model'
3
3
  module Fog
4
4
  module AWS
5
5
  class CloudWatch
6
-
7
6
  class Alarm < Fog::Model
8
- attribute :alarm_names, :aliases => 'AlarmNames'
7
+ identity :id, :aliases => 'AlarmName'
8
+
9
+ attribute :actions_enabled, :aliases => 'ActionsEnabled'
10
+ attribute :alarm_actions, :aliases => 'AlarmActions'
11
+ attribute :arn, :aliases => 'AlarmArn'
12
+ attribute :alarm_configuration_updated_timestamp, :aliases => 'AlarmConfigurationUpdatedTimestamp'
13
+ attribute :alarm_description, :aliases => 'AlarmDescription'
14
+ attribute :comparison_operator, :aliases => 'ComparisonOperator'
15
+ attribute :dimensions, :aliases => 'Dimensions'
16
+ attribute :evaluation_periods, :aliases => 'EvaluationPeriods'
17
+ attribute :insufficient_data_actions, :aliases => 'InsufficientDataActions'
18
+ attribute :metric_name, :aliases => 'MetricName'
19
+ attribute :namespace, :aliases => 'Namespace'
20
+ attribute :ok_actions, :aliases => 'OKActions'
21
+ attribute :period, :aliases => 'Period'
22
+ attribute :state_reason, :aliases => 'StateReason'
23
+ attribute :state_reason_data, :aliases => 'StateReasonData'
24
+ attribute :state_updated_timestamp, :aliases => 'StateUpdatedTimestamp'
25
+ attribute :state_value, :aliases => 'StateValue'
26
+ attribute :statistic, :aliases => 'Statistic'
27
+ attribute :threshold, :aliases => 'Threshold'
28
+ attribute :unit, :aliases => 'Unit'
29
+
30
+ def initialize(attributes)
31
+ attributes['EvaluationPeriods'] ||= 1
32
+ attributes['Namespace'] ||= 'AWS/EC2'
33
+ super
34
+ end
35
+
36
+ def save
37
+ requires :id
38
+ requires :comparison_operator
39
+ requires :evaluation_periods
40
+ requires :metric_name
41
+ requires :namespace
42
+ requires :period
43
+ requires :statistic
44
+ requires :threshold
45
+
46
+ options = Hash[self.class.aliases.map { |key, value| [key, send(value)] }]
47
+ options.delete_if { |key, value| value.nil? }
48
+
49
+ connection.put_metric_alarm(options)
50
+ reload
51
+ end
52
+
53
+ def destroy
54
+ requires :id
55
+ connection.delete_alarms(id)
56
+ end
9
57
  end
10
58
  end
11
59
  end
@@ -7,7 +7,24 @@ module Fog
7
7
 
8
8
  class Alarms < Fog::Collection
9
9
  model Fog::AWS::CloudWatch::Alarm
10
-
10
+
11
+ def all
12
+ data = []
13
+ next_token = nil
14
+ loop do
15
+ result = connection.describe_alarms('NextToken' => next_token).body['DescribeAlarmsResult']
16
+ data += result['MetricAlarms']
17
+ next_token = result['NextToken']
18
+ break if next_token.nil?
19
+ end
20
+ load(data)
21
+ end
22
+
23
+ def get(identity)
24
+ data = connection.describe_alarms('AlarmNames' => identity).body['DescribeAlarmsResult']['MetricAlarms'].first
25
+ new(data) unless data.nil?
26
+ end
27
+
11
28
  #alarm_names is an array of alarm names
12
29
  def delete(alarm_names)
13
30
  connection.delete_alarms(alarm_names)