fog 1.6.0 → 1.7.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.
Files changed (282) hide show
  1. data/.gitignore +1 -0
  2. data/README.md +1 -0
  3. data/Rakefile +2 -1
  4. data/changelog.txt +184 -0
  5. data/docs/cdn/index.markdown +69 -3
  6. data/fog.gemspec +2 -2
  7. data/lib/fog.rb +2 -1
  8. data/lib/fog/atmos/models/storage/file.rb +16 -14
  9. data/lib/fog/aws/auto_scaling.rb +55 -13
  10. data/lib/fog/aws/cdn.rb +69 -9
  11. data/lib/fog/aws/cloud_watch.rb +15 -1
  12. data/lib/fog/aws/compute.rb +2 -0
  13. data/lib/fog/aws/models/auto_scaling/group.rb +10 -4
  14. data/lib/fog/aws/models/cdn/distribution.rb +93 -0
  15. data/lib/fog/aws/models/cdn/distribution_helper.rb +64 -0
  16. data/lib/fog/aws/models/cdn/distributions.rb +32 -0
  17. data/lib/fog/aws/models/cdn/distributions_helper.rb +47 -0
  18. data/lib/fog/aws/models/cdn/invalidation.rb +64 -0
  19. data/lib/fog/aws/models/cdn/invalidations.rb +54 -0
  20. data/lib/fog/aws/models/cdn/streaming_distribution.rb +77 -0
  21. data/lib/fog/aws/models/cdn/streaming_distributions.rb +32 -0
  22. data/lib/fog/aws/models/compute/server.rb +0 -23
  23. data/lib/fog/aws/models/compute/spot_request.rb +2 -24
  24. data/lib/fog/aws/models/rds/server.rb +18 -0
  25. data/lib/fog/aws/models/rds/subnet_group.rb +20 -0
  26. data/lib/fog/aws/models/rds/subnet_groups.rb +27 -0
  27. data/lib/fog/aws/models/storage/file.rb +1 -1
  28. data/lib/fog/aws/parsers/auto_scaling/describe_adjustment_types.rb +15 -2
  29. data/lib/fog/aws/parsers/auto_scaling/describe_auto_scaling_groups.rb +39 -13
  30. data/lib/fog/aws/parsers/auto_scaling/describe_auto_scaling_notification_types.rb +43 -0
  31. data/lib/fog/aws/parsers/auto_scaling/describe_metric_collection_types.rb +3 -3
  32. data/lib/fog/aws/parsers/auto_scaling/describe_notification_configurations.rb +42 -0
  33. data/lib/fog/aws/parsers/auto_scaling/describe_scaling_process_types.rb +15 -2
  34. data/lib/fog/aws/parsers/auto_scaling/describe_tags.rb +46 -0
  35. data/lib/fog/aws/parsers/auto_scaling/describe_termination_policy_types.rb +44 -0
  36. data/lib/fog/aws/parsers/cdn/get_invalidation.rb +32 -0
  37. data/lib/fog/aws/parsers/cloud_formation/describe_stacks.rb +1 -1
  38. data/lib/fog/aws/parsers/cloud_watch/list_metrics.rb +1 -1
  39. data/lib/fog/aws/parsers/compute/describe_availability_zones.rb +13 -2
  40. data/lib/fog/aws/parsers/compute/describe_reserved_instances.rb +1 -1
  41. data/lib/fog/aws/parsers/elasticache/base.rb +0 -2
  42. data/lib/fog/aws/parsers/elasticache/engine_defaults_parser.rb +1 -1
  43. data/lib/fog/aws/parsers/elasticache/event_list.rb +2 -0
  44. data/lib/fog/aws/parsers/rds/base.rb +32 -0
  45. data/lib/fog/aws/parsers/rds/create_db_subnet_group.rb +38 -0
  46. data/lib/fog/aws/parsers/rds/describe_db_subnet_groups.rb +38 -0
  47. data/lib/fog/aws/parsers/rds/event_list.rb +40 -0
  48. data/lib/fog/aws/parsers/rds/subnet_group_parser.rb +38 -0
  49. data/lib/fog/aws/parsers/rds/tag_list_parser.rb +35 -0
  50. data/lib/fog/aws/rds.rb +24 -7
  51. data/lib/fog/aws/requests/auto_scaling/create_auto_scaling_group.rb +36 -16
  52. data/lib/fog/aws/requests/auto_scaling/create_launch_configuration.rb +19 -12
  53. data/lib/fog/aws/requests/auto_scaling/create_or_update_tags.rb +63 -0
  54. data/lib/fog/aws/requests/auto_scaling/delete_auto_scaling_group.rb +10 -3
  55. data/lib/fog/aws/requests/auto_scaling/delete_notification_configuration.rb +21 -5
  56. data/lib/fog/aws/requests/auto_scaling/delete_policy.rb +2 -2
  57. data/lib/fog/aws/requests/auto_scaling/delete_tags.rb +63 -0
  58. data/lib/fog/aws/requests/auto_scaling/describe_adjustment_types.rb +4 -3
  59. data/lib/fog/aws/requests/auto_scaling/describe_auto_scaling_groups.rb +17 -13
  60. data/lib/fog/aws/requests/auto_scaling/describe_auto_scaling_instances.rb +1 -1
  61. data/lib/fog/aws/requests/auto_scaling/describe_auto_scaling_notification_types.rb +55 -0
  62. data/lib/fog/aws/requests/auto_scaling/describe_metric_collection_types.rb +6 -5
  63. data/lib/fog/aws/requests/auto_scaling/describe_notification_configurations.rb +79 -0
  64. data/lib/fog/aws/requests/auto_scaling/describe_policies.rb +1 -1
  65. data/lib/fog/aws/requests/auto_scaling/describe_scaling_process_types.rb +4 -3
  66. data/lib/fog/aws/requests/auto_scaling/describe_tags.rb +74 -0
  67. data/lib/fog/aws/requests/auto_scaling/describe_termination_policy_types.rb +53 -0
  68. data/lib/fog/aws/requests/auto_scaling/disable_metrics_collection.rb +1 -1
  69. data/lib/fog/aws/requests/auto_scaling/enable_metrics_collection.rb +2 -2
  70. data/lib/fog/aws/requests/auto_scaling/put_notification_configuration.rb +30 -11
  71. data/lib/fog/aws/requests/auto_scaling/put_scaling_policy.rb +4 -4
  72. data/lib/fog/aws/requests/auto_scaling/put_scheduled_update_group_action.rb +8 -5
  73. data/lib/fog/aws/requests/auto_scaling/set_desired_capacity.rb +2 -2
  74. data/lib/fog/aws/requests/auto_scaling/set_instance_health.rb +2 -2
  75. data/lib/fog/aws/requests/auto_scaling/suspend_processes.rb +1 -1
  76. data/lib/fog/aws/requests/auto_scaling/update_auto_scaling_group.rb +30 -18
  77. data/lib/fog/aws/requests/cdn/delete_distribution.rb +31 -0
  78. data/lib/fog/aws/requests/cdn/delete_streaming_distribution.rb +30 -0
  79. data/lib/fog/aws/requests/cdn/get_distribution.rb +28 -0
  80. data/lib/fog/aws/requests/cdn/get_distribution_list.rb +29 -0
  81. data/lib/fog/aws/requests/cdn/get_invalidation.rb +60 -0
  82. data/lib/fog/aws/requests/cdn/get_invalidation_list.rb +41 -0
  83. data/lib/fog/aws/requests/cdn/get_streaming_distribution.rb +26 -0
  84. data/lib/fog/aws/requests/cdn/get_streaming_distribution_list.rb +30 -0
  85. data/lib/fog/aws/requests/cdn/post_distribution.rb +44 -0
  86. data/lib/fog/aws/requests/cdn/post_invalidation.rb +33 -0
  87. data/lib/fog/aws/requests/cdn/post_streaming_distribution.rb +44 -0
  88. data/lib/fog/aws/requests/cdn/put_distribution_config.rb +28 -0
  89. data/lib/fog/aws/requests/cdn/put_streaming_distribution_config.rb +28 -0
  90. data/lib/fog/aws/requests/compute/create_image.rb +32 -5
  91. data/lib/fog/aws/requests/compute/create_subnet.rb +3 -3
  92. data/lib/fog/aws/requests/compute/create_volume.rb +2 -2
  93. data/lib/fog/aws/requests/compute/register_image.rb +1 -1
  94. data/lib/fog/aws/requests/elasticache/describe_events.rb +7 -4
  95. data/lib/fog/aws/requests/glacier/create_archive.rb +1 -1
  96. data/lib/fog/aws/requests/glacier/initiate_multipart_upload.rb +1 -1
  97. data/lib/fog/aws/requests/rds/add_tags_to_resource.rb +46 -0
  98. data/lib/fog/aws/requests/rds/create_db_instance.rb +2 -0
  99. data/lib/fog/aws/requests/rds/create_db_subnet_group.rb +58 -0
  100. data/lib/fog/aws/requests/rds/describe_db_subnet_groups.rb +63 -0
  101. data/lib/fog/aws/requests/rds/describe_events.rb +52 -0
  102. data/lib/fog/aws/requests/rds/list_tags_for_resource.rb +44 -0
  103. data/lib/fog/aws/requests/rds/remove_tags_from_resource.rb +44 -0
  104. data/lib/fog/aws/sqs.rb +1 -1
  105. data/lib/fog/aws/storage.rb +1 -1
  106. data/lib/fog/bin/openstack.rb +5 -0
  107. data/lib/fog/bluebox/models/compute/server.rb +0 -19
  108. data/lib/fog/bluebox/requests/compute/create_block.rb +8 -8
  109. data/lib/fog/brightbox/compute.rb +56 -7
  110. data/lib/fog/brightbox/models/compute/accounts.rb +29 -0
  111. data/lib/fog/brightbox/models/compute/api_client.rb +37 -0
  112. data/lib/fog/brightbox/models/compute/api_clients.rb +24 -0
  113. data/lib/fog/brightbox/models/compute/application.rb +27 -0
  114. data/lib/fog/brightbox/models/compute/applications.rb +28 -0
  115. data/lib/fog/brightbox/models/compute/server.rb +3 -1
  116. data/lib/fog/brightbox/models/compute/users.rb +1 -3
  117. data/lib/fog/brightbox/requests/compute/create_application.rb +13 -0
  118. data/lib/fog/brightbox/requests/compute/create_cloud_ip.rb +2 -2
  119. data/lib/fog/brightbox/requests/compute/destroy_application.rb +14 -0
  120. data/lib/fog/brightbox/requests/compute/get_account.rb +28 -4
  121. data/lib/fog/brightbox/requests/compute/get_application.rb +14 -0
  122. data/lib/fog/brightbox/requests/compute/get_authenticated_user.rb +19 -0
  123. data/lib/fog/brightbox/requests/compute/get_scoped_account.rb +19 -0
  124. data/lib/fog/brightbox/requests/compute/get_user.rb +28 -5
  125. data/lib/fog/brightbox/requests/compute/list_accounts.rb +13 -0
  126. data/lib/fog/brightbox/requests/compute/list_applications.rb +13 -0
  127. data/lib/fog/brightbox/requests/compute/reset_secret_application.rb +14 -0
  128. data/lib/fog/brightbox/requests/compute/update_account.rb +51 -3
  129. data/lib/fog/brightbox/requests/compute/update_application.rb +15 -0
  130. data/lib/fog/brightbox/requests/compute/update_firewall_rule.rb +4 -2
  131. data/lib/fog/brightbox/requests/compute/update_scoped_account.rb +37 -0
  132. data/lib/fog/clodo/models/compute/server.rb +7 -44
  133. data/lib/fog/compute/models/server.rb +23 -2
  134. data/lib/fog/core/time.rb +2 -0
  135. data/lib/fog/core/wait_for.rb +0 -2
  136. data/lib/fog/ecloud/models/compute/servers.rb +3 -1
  137. data/lib/fog/ecloud/requests/compute/get_servers.rb +1 -1
  138. data/lib/fog/ecloud/requests/compute/get_tasks.rb +1 -1
  139. data/lib/fog/go_grid/models/compute/server.rb +0 -4
  140. data/lib/fog/google/storage.rb +1 -1
  141. data/lib/fog/hp/models/compute/server.rb +1 -23
  142. data/lib/fog/hp/storage.rb +0 -1
  143. data/lib/fog/joyent/models/compute/server.rb +4 -0
  144. data/lib/fog/joyent/models/compute/servers.rb +4 -3
  145. data/lib/fog/libvirt/models/compute/server.rb +1 -27
  146. data/lib/fog/linode/models/compute/server.rb +0 -1
  147. data/lib/fog/local/models/storage/directory.rb +1 -1
  148. data/lib/fog/network.rb +26 -0
  149. data/lib/fog/ninefold/compute.rb +8 -0
  150. data/lib/fog/ninefold/requests/compute/assign_to_load_balancer_rule.rb +13 -0
  151. data/lib/fog/ninefold/requests/compute/create_load_balancer_rule.rb +11 -0
  152. data/lib/fog/ninefold/requests/compute/delete_load_balancer_rule.rb +11 -0
  153. data/lib/fog/ninefold/requests/compute/list_load_balancer_rule_instances.rb +15 -0
  154. data/lib/fog/ninefold/requests/compute/list_load_balancer_rules.rb +14 -0
  155. data/lib/fog/ninefold/requests/compute/remove_from_load_balancer_rule.rb +12 -0
  156. data/lib/fog/ninefold/requests/compute/update_load_balancer_rule.rb +15 -0
  157. data/lib/fog/ninefold/storage.rb +14 -112
  158. data/lib/fog/openstack.rb +4 -1
  159. data/lib/fog/openstack/compute.rb +20 -1
  160. data/lib/fog/openstack/identity.rb +67 -18
  161. data/lib/fog/openstack/image.rb +12 -4
  162. data/lib/fog/openstack/models/compute/security_group.rb +1 -1
  163. data/lib/fog/openstack/models/compute/server.rb +5 -23
  164. data/lib/fog/openstack/models/identity/tenants.rb +5 -3
  165. data/lib/fog/openstack/models/identity/users.rb +4 -1
  166. data/lib/fog/openstack/models/image/image.rb +6 -1
  167. data/lib/fog/openstack/models/network/network.rb +46 -0
  168. data/lib/fog/openstack/models/network/networks.rb +34 -0
  169. data/lib/fog/openstack/models/network/port.rb +52 -0
  170. data/lib/fog/openstack/models/network/ports.rb +34 -0
  171. data/lib/fog/openstack/models/network/subnet.rb +55 -0
  172. data/lib/fog/openstack/models/network/subnets.rb +34 -0
  173. data/lib/fog/openstack/network.rb +234 -0
  174. data/lib/fog/openstack/requests/compute/attach_volume.rb +10 -0
  175. data/lib/fog/openstack/requests/compute/create_security_group.rb +15 -11
  176. data/lib/fog/openstack/requests/compute/create_security_group_rule.rb +17 -15
  177. data/lib/fog/openstack/requests/compute/create_server.rb +7 -1
  178. data/lib/fog/openstack/requests/compute/create_volume.rb +10 -10
  179. data/lib/fog/openstack/requests/compute/create_volume_snapshot.rb +16 -1
  180. data/lib/fog/openstack/requests/compute/detach_volume.rb +5 -0
  181. data/lib/fog/openstack/requests/compute/get_snapshot_details.rb +4 -4
  182. data/lib/fog/openstack/requests/compute/get_volume_details.rb +9 -9
  183. data/lib/fog/openstack/requests/compute/list_security_groups.rb +3 -3
  184. data/lib/fog/openstack/requests/compute/list_volumes.rb +14 -14
  185. data/lib/fog/openstack/requests/identity/create_tenant.rb +3 -3
  186. data/lib/fog/openstack/requests/identity/create_user.rb +1 -1
  187. data/lib/fog/openstack/requests/identity/delete_role.rb +1 -1
  188. data/lib/fog/openstack/requests/identity/get_tenant.rb +1 -1
  189. data/lib/fog/openstack/requests/identity/list_roles.rb +7 -0
  190. data/lib/fog/openstack/requests/image/create_image.rb +36 -38
  191. data/lib/fog/openstack/requests/image/delete_image.rb +0 -2
  192. data/lib/fog/openstack/requests/image/list_public_images.rb +7 -25
  193. data/lib/fog/openstack/requests/image/list_public_images_detailed.rb +2 -41
  194. data/lib/fog/openstack/requests/image/update_image.rb +26 -21
  195. data/lib/fog/openstack/requests/image/update_image_members.rb +37 -0
  196. data/lib/fog/openstack/requests/network/create_network.rb +44 -0
  197. data/lib/fog/openstack/requests/network/create_port.rb +52 -0
  198. data/lib/fog/openstack/requests/network/create_subnet.rb +56 -0
  199. data/lib/fog/openstack/requests/network/delete_network.rb +30 -0
  200. data/lib/fog/openstack/requests/network/delete_port.rb +30 -0
  201. data/lib/fog/openstack/requests/network/delete_subnet.rb +30 -0
  202. data/lib/fog/openstack/requests/network/get_network.rb +42 -0
  203. data/lib/fog/openstack/requests/network/get_port.rb +48 -0
  204. data/lib/fog/openstack/requests/network/get_subnet.rb +49 -0
  205. data/lib/fog/openstack/requests/network/list_networks.rb +27 -0
  206. data/lib/fog/openstack/requests/network/list_ports.rb +27 -0
  207. data/lib/fog/openstack/requests/network/list_subnets.rb +27 -0
  208. data/lib/fog/openstack/requests/network/set_tenant.rb +21 -0
  209. data/lib/fog/openstack/requests/network/update_network.rb +41 -0
  210. data/lib/fog/openstack/requests/network/update_port.rb +44 -0
  211. data/lib/fog/openstack/requests/network/update_subnet.rb +44 -0
  212. data/lib/fog/openstack/requests/volume/create_volume.rb +10 -10
  213. data/lib/fog/openstack/requests/volume/create_volume_snapshot.rb +16 -1
  214. data/lib/fog/openstack/requests/volume/get_snapshot_details.rb +6 -6
  215. data/lib/fog/openstack/requests/volume/get_volume_details.rb +10 -10
  216. data/lib/fog/openstack/requests/volume/list_volumes.rb +14 -14
  217. data/lib/fog/openstack/volume.rb +10 -0
  218. data/lib/fog/rackspace/models/compute/server.rb +1 -24
  219. data/lib/fog/rackspace/models/compute_v2/server.rb +4 -2
  220. data/lib/fog/rackspace/requests/compute_v2/create_server.rb +1 -1
  221. data/lib/fog/rackspace/requests/compute_v2/list_servers.rb +1 -1
  222. data/lib/fog/storm_on_demand/models/compute/server.rb +1 -5
  223. data/lib/fog/virtual_box/models/compute/server.rb +2 -44
  224. data/lib/fog/vmfusion/models/compute/server.rb +3 -36
  225. data/lib/fog/vsphere/models/compute/server.rb +1 -1
  226. data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +2 -31
  227. data/lib/fog/vsphere/requests/compute/vm_clone.rb +35 -7
  228. data/tests/aws/models/cdn/distribution_tests.rb +15 -0
  229. data/tests/aws/models/cdn/distributions_tests.rb +15 -0
  230. data/tests/aws/models/cdn/invalidation_tests.rb +32 -0
  231. data/tests/aws/models/cdn/invalidations_tests.rb +15 -0
  232. data/tests/aws/models/cdn/streaming_distribution_tests.rb +15 -0
  233. data/tests/aws/models/cdn/streaming_distributions_tests.rb +15 -0
  234. data/tests/aws/models/rds/tagging_tests.rb +20 -0
  235. data/tests/aws/requests/auto_scaling/auto_scaling_tests.rb +1 -11
  236. data/tests/aws/requests/auto_scaling/describe_types_tests.rb +102 -0
  237. data/tests/aws/requests/auto_scaling/helper.rb +47 -3
  238. data/tests/aws/requests/auto_scaling/notification_configuration_tests.rb +123 -0
  239. data/tests/aws/requests/auto_scaling/tag_tests.rb +62 -0
  240. data/tests/aws/requests/cdn/cdn_tests.rb +252 -0
  241. data/tests/aws/requests/compute/image_tests.rb +32 -1
  242. data/tests/aws/requests/compute/volume_tests.rb +3 -3
  243. data/tests/aws/requests/rds/describe_events.rb +16 -0
  244. data/tests/aws/requests/rds/helper.rb +26 -0
  245. data/tests/aws/requests/rds/subnet_groups_test.rb +48 -0
  246. data/tests/aws/requests/rds/tagging_tests.rb +78 -0
  247. data/tests/brightbox/requests/compute/account_tests.rb +24 -4
  248. data/tests/brightbox/requests/compute/application_test.rb +63 -0
  249. data/tests/brightbox/requests/compute/helper.rb +49 -1
  250. data/tests/helper.rb +4 -1
  251. data/tests/local/models/directory_tests.rb +16 -0
  252. data/tests/ninefold/requests/compute/helper.rb +53 -0
  253. data/tests/ninefold/requests/compute/load_balancer_tests.rb +66 -0
  254. data/tests/openstack/models/image/image_tests.rb +1 -0
  255. data/tests/openstack/models/network/network_tests.rb +24 -0
  256. data/tests/openstack/models/network/networks_tests.rb +21 -0
  257. data/tests/openstack/models/network/port_tests.rb +28 -0
  258. data/tests/openstack/models/network/ports_tests.rb +25 -0
  259. data/tests/openstack/models/network/subnet_tests.rb +30 -0
  260. data/tests/openstack/models/network/subnets_tests.rb +27 -0
  261. data/tests/openstack/requests/compute/image_tests.rb +3 -4
  262. data/tests/openstack/requests/compute/quota_tests.rb +2 -0
  263. data/tests/openstack/requests/compute/security_group_tests.rb +10 -10
  264. data/tests/openstack/requests/compute/server_tests.rb +3 -1
  265. data/tests/openstack/requests/compute/volume_tests.rb +11 -12
  266. data/tests/openstack/requests/identity/tenant_tests.rb +2 -1
  267. data/tests/openstack/requests/image/image_tests.rb +66 -45
  268. data/tests/openstack/requests/network/network_tests.rb +56 -0
  269. data/tests/openstack/requests/network/port_tests.rb +63 -0
  270. data/tests/openstack/requests/network/subnet_tests.rb +66 -0
  271. data/tests/rackspace/models/identity/user_tests.rb +1 -1
  272. data/tests/rackspace/models/identity/users_tests.rb +1 -1
  273. metadata +137 -13
  274. data/lib/fog/ninefold/models/storage/directories.rb +0 -48
  275. data/lib/fog/ninefold/models/storage/directory.rb +0 -53
  276. data/lib/fog/ninefold/models/storage/file.rb +0 -108
  277. data/lib/fog/ninefold/models/storage/files.rb +0 -73
  278. data/lib/fog/ninefold/requests/storage/delete_namespace.rb +0 -19
  279. data/lib/fog/ninefold/requests/storage/get_namespace.rb +0 -20
  280. data/lib/fog/ninefold/requests/storage/head_namespace.rb +0 -20
  281. data/lib/fog/ninefold/requests/storage/post_namespace.rb +0 -20
  282. data/lib/fog/ninefold/requests/storage/put_namespace.rb +0 -20
@@ -0,0 +1,52 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Network
5
+ class OpenStack
6
+ class Port < Fog::Model
7
+ identity :id
8
+
9
+ attribute :name
10
+ attribute :network_id
11
+ attribute :fixed_ips
12
+ attribute :mac_address
13
+ attribute :status
14
+ attribute :admin_state_up
15
+ attribute :device_owner
16
+ attribute :device_id
17
+ attribute :tenant_id
18
+
19
+ def initialize(attributes)
20
+ @connection = attributes[:connection]
21
+ super
22
+ end
23
+
24
+ def save
25
+ requires :network_id
26
+ identity ? update : create
27
+ end
28
+
29
+ def create
30
+ requires :network_id
31
+ merge_attributes(connection.create_port(self.network_id,
32
+ self.attributes).body['port'])
33
+ self
34
+ end
35
+
36
+ def update
37
+ requires :id, :network_id
38
+ merge_attributes(connection.update_port(self.id,
39
+ self.attributes).body['port'])
40
+ self
41
+ end
42
+
43
+ def destroy
44
+ requires :id
45
+ connection.delete_port(self.id)
46
+ true
47
+ end
48
+
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,34 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/openstack/models/network/port'
3
+
4
+ module Fog
5
+ module Network
6
+ class OpenStack
7
+ class Ports < Fog::Collection
8
+
9
+ attribute :filters
10
+
11
+ model Fog::Network::OpenStack::Port
12
+
13
+ def initialize(attributes)
14
+ self.filters ||= {}
15
+ super
16
+ end
17
+
18
+ def all(filters = filters)
19
+ self.filters = filters
20
+ load(connection.list_ports(filters).body['ports'])
21
+ end
22
+
23
+ def get(port_id)
24
+ if port = connection.get_port(port_id).body['port']
25
+ new(port)
26
+ end
27
+ rescue Fog::Network::OpenStack::NotFound
28
+ nil
29
+ end
30
+
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,55 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Network
5
+ class OpenStack
6
+ class Subnet < Fog::Model
7
+ identity :id
8
+
9
+ attribute :name
10
+ attribute :network_id
11
+ attribute :cidr
12
+ attribute :ip_version
13
+ attribute :gateway_ip
14
+ attribute :allocation_pools
15
+ attribute :dns_nameservers
16
+ attribute :host_routes
17
+ attribute :enable_dhcp
18
+ attribute :tenant_id
19
+
20
+ def initialize(attributes)
21
+ @connection = attributes[:connection]
22
+ super
23
+ end
24
+
25
+ def save
26
+ requires :network_id, :cidr, :ip_version
27
+ identity ? update : create
28
+ end
29
+
30
+ def create
31
+ requires :network_id, :cidr, :ip_version
32
+ merge_attributes(connection.create_subnet(self.network_id,
33
+ self.cidr,
34
+ self.ip_version,
35
+ self.attributes).body['subnet'])
36
+ self
37
+ end
38
+
39
+ def update
40
+ requires :id, :network_id, :cidr, :ip_version
41
+ merge_attributes(connection.update_subnet(self.id,
42
+ self.attributes).body['subnet'])
43
+ self
44
+ end
45
+
46
+ def destroy
47
+ requires :id
48
+ connection.delete_subnet(self.id)
49
+ true
50
+ end
51
+
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,34 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/openstack/models/network/subnet'
3
+
4
+ module Fog
5
+ module Network
6
+ class OpenStack
7
+ class Subnets < Fog::Collection
8
+
9
+ attribute :filters
10
+
11
+ model Fog::Network::OpenStack::Subnet
12
+
13
+ def initialize(attributes)
14
+ self.filters ||= {}
15
+ super
16
+ end
17
+
18
+ def all(filters = filters)
19
+ self.filters = filters
20
+ load(connection.list_subnets(filters).body['subnets'])
21
+ end
22
+
23
+ def get(subnet_id)
24
+ if subnet = connection.get_subnet(subnet_id).body['subnet']
25
+ new(subnet)
26
+ end
27
+ rescue Fog::Network::OpenStack::NotFound
28
+ nil
29
+ end
30
+
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,234 @@
1
+ require 'fog/openstack'
2
+
3
+ module Fog
4
+ module Network
5
+ class OpenStack < Fog::Service
6
+
7
+ requires :openstack_auth_url
8
+ recognizes :openstack_auth_token, :openstack_management_url, :persistent,
9
+ :openstack_service_name, :openstack_tenant,
10
+ :openstack_api_key, :openstack_username,
11
+ :current_user, :current_tenant
12
+
13
+ ## MODELS
14
+ #
15
+ model_path 'fog/openstack/models/network'
16
+ model :network
17
+ collection :networks
18
+ model :port
19
+ collection :ports
20
+ model :subnet
21
+ collection :subnets
22
+
23
+ ## REQUESTS
24
+ #
25
+ request_path 'fog/openstack/requests/network'
26
+
27
+ # Network CRUD
28
+ request :list_networks
29
+ request :create_network
30
+ request :delete_network
31
+ request :get_network
32
+ request :update_network
33
+
34
+ # Port CRUD
35
+ request :list_ports
36
+ request :create_port
37
+ request :delete_port
38
+ request :get_port
39
+ request :update_port
40
+
41
+ # Subnet CRUD
42
+ request :list_subnets
43
+ request :create_subnet
44
+ request :delete_subnet
45
+ request :get_subnet
46
+ request :update_subnet
47
+
48
+ # Tenant
49
+ request :set_tenant
50
+
51
+ class Mock
52
+ def self.data
53
+ @data ||= Hash.new do |hash, key|
54
+ hash[key] = {
55
+ :networks => {},
56
+ :ports => {},
57
+ :subnets => {},
58
+ }
59
+ end
60
+ end
61
+
62
+ def self.reset
63
+ @data = nil
64
+ end
65
+
66
+ def initialize(options={})
67
+ @openstack_username = options[:openstack_username]
68
+ @openstack_tenant = options[:openstack_tenant]
69
+ end
70
+
71
+ def data
72
+ self.class.data["#{@openstack_username}-#{@openstack_tenant}"]
73
+ end
74
+
75
+ def reset_data
76
+ self.class.data.delete("#{@openstack_username}-#{@openstack_tenant}")
77
+ end
78
+
79
+ def credentials
80
+ { :provider => 'openstack',
81
+ :openstack_auth_url => @openstack_auth_uri.to_s,
82
+ :openstack_auth_token => @auth_token,
83
+ :openstack_management_url => @openstack_management_url }
84
+ end
85
+ end
86
+
87
+ class Real
88
+ attr_reader :current_user
89
+ attr_reader :current_tenant
90
+
91
+ def initialize(options={})
92
+ require 'multi_json'
93
+
94
+ @openstack_auth_token = options[:openstack_auth_token]
95
+
96
+ unless @openstack_auth_token
97
+ missing_credentials = Array.new
98
+ @openstack_api_key = options[:openstack_api_key]
99
+ @openstack_username = options[:openstack_username]
100
+
101
+ missing_credentials << :openstack_api_key unless @openstack_api_key
102
+ missing_credentials << :openstack_username unless @openstack_username
103
+ raise ArgumentError, "Missing required arguments: #{missing_credentials.join(', ')}" unless missing_credentials.empty?
104
+ end
105
+
106
+ @openstack_tenant = options[:openstack_tenant]
107
+ @openstack_auth_uri = URI.parse(options[:openstack_auth_url])
108
+ @openstack_management_url = options[:openstack_management_url]
109
+ @openstack_must_reauthenticate = false
110
+ @openstack_service_name = options[:openstack_service_name] || ['network']
111
+
112
+ @connection_options = options[:connection_options] || {}
113
+
114
+ @current_user = options[:current_user]
115
+ @current_tenant = options[:current_tenant]
116
+
117
+ authenticate
118
+
119
+ @persistent = options[:persistent] || false
120
+ @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
121
+ end
122
+
123
+ def credentials
124
+ { :provider => 'openstack',
125
+ :openstack_auth_url => @openstack_auth_uri.to_s,
126
+ :openstack_auth_token => @auth_token,
127
+ :openstack_management_url => @openstack_management_url,
128
+ :current_user => @current_user,
129
+ :current_tenant => @current_tenant }
130
+ end
131
+
132
+ def reload
133
+ @connection.reset
134
+ end
135
+
136
+ def request(params)
137
+ begin
138
+ response = @connection.request(params.merge({
139
+ :headers => {
140
+ 'Content-Type' => 'application/json',
141
+ 'Accept' => 'application/json',
142
+ 'X-Auth-Token' => @auth_token
143
+ }.merge!(params[:headers] || {}),
144
+ :host => @host,
145
+ :path => "#{@path}/#{params[:path]}"#,
146
+ # Causes errors for some requests like tenants?limit=1
147
+ # :query => ('ignore_awful_caching' << Time.now.to_i.to_s)
148
+ }))
149
+ rescue Excon::Errors::Unauthorized => error
150
+ if error.response.body != 'Bad username or password' # token expiration
151
+ @openstack_must_reauthenticate = true
152
+ authenticate
153
+ retry
154
+ else # bad credentials
155
+ raise error
156
+ end
157
+ rescue Excon::Errors::HTTPStatusError => error
158
+ raise case error
159
+ when Excon::Errors::NotFound
160
+ Fog::Network::OpenStack::NotFound.slurp(error)
161
+ else
162
+ error
163
+ end
164
+ end
165
+ unless response.body.empty?
166
+ response.body = MultiJson.decode(response.body)
167
+ end
168
+ response
169
+ end
170
+
171
+ private
172
+
173
+ def authenticate
174
+ if @openstack_must_reauthenticate || @openstack_auth_token.nil?
175
+ options = {
176
+ :openstack_tenant => @openstack_tenant,
177
+ :openstack_api_key => @openstack_api_key,
178
+ :openstack_username => @openstack_username,
179
+ :openstack_auth_uri => @openstack_auth_uri,
180
+ :openstack_auth_token => @openstack_auth_token,
181
+ :openstack_service_name => @openstack_service_name,
182
+ :openstack_endpoint_type => 'adminURL'
183
+ }
184
+
185
+ credentials = Fog::OpenStack.authenticate_v2(options, @connection_options)
186
+
187
+ @current_user = credentials[:user]
188
+ @current_tenant = credentials[:tenant]
189
+
190
+ @openstack_must_reauthenticate = false
191
+ @auth_token = credentials[:token]
192
+ @openstack_management_url = credentials[:server_management_url]
193
+ uri = URI.parse(@openstack_management_url)
194
+ else
195
+ @auth_token = @openstack_auth_token
196
+ uri = URI.parse(@openstack_management_url)
197
+ end
198
+
199
+ @host = uri.host
200
+ @path = uri.path
201
+ @path.sub!(/\/$/, '')
202
+ unless @path.match(/^\/v(\d)+(\.)?(\d)*$/)
203
+ @path = "/" + retrieve_current_version(uri)
204
+ end
205
+ @port = uri.port
206
+ @scheme = uri.scheme
207
+ true
208
+ end
209
+
210
+ def retrieve_current_version(uri)
211
+ response = Fog::Connection.new(
212
+ "#{uri.scheme}://#{uri.host}:#{uri.port}", false, @connection_options).request({
213
+ :expects => [200, 204],
214
+ :headers => {'Content-Type' => 'application/json',
215
+ 'Accept' => 'application/json',
216
+ 'X-Auth-Token' => @auth_token},
217
+ :host => uri.host,
218
+ :method => 'GET'
219
+ })
220
+
221
+ body = Fog::JSON.decode(response.body)
222
+ version = nil
223
+ unless body['versions'].empty?
224
+ current_version = body['versions'].detect { |x| x["status"] == "CURRENT" }
225
+ version = current_version["id"]
226
+ end
227
+ raise Errors::NotFound.new('No API versions found') if version.nil?
228
+ version
229
+ end
230
+
231
+ end
232
+ end
233
+ end
234
+ end
@@ -21,6 +21,16 @@ module Fog
21
21
  end
22
22
 
23
23
  class Mock
24
+ def attach_volume(volume_id, server_id, device)
25
+ response = Excon::Response.new
26
+ response.status = 200
27
+ response.body ={ "volumeAttachment" => {
28
+ "id" => volume_id,
29
+ "volumeId" => volume_id
30
+ }
31
+ }
32
+ response
33
+ end
24
34
  end
25
35
 
26
36
  end
@@ -23,21 +23,25 @@ module Fog
23
23
 
24
24
  class Mock
25
25
  def create_security_group(name, description)
26
+ tenant_id = Fog::Identity.new(:provider => 'OpenStack').current_tenant['id']
27
+ security_group_id = Fog::Mock.random_numbers(2).to_i
28
+ self.data[:security_groups][security_group_id] = {
29
+ 'tenant_id' => tenant_id,
30
+ 'rules' => [],
31
+ 'id' => security_group_id,
32
+ 'name' => name,
33
+ 'description' => description
34
+ }
35
+
26
36
  response = Excon::Response.new
27
37
  response.status = 200
28
38
  response.headers = {
29
- "X-Compute-Request-Id" => "req-c373a42c-2825-4e60-8d34-99416ea850be",
30
- "Content-Type" => "application/json",
31
- "Content-Length" => "139",
32
- "Date" => Date.new}
39
+ 'X-Compute-Request-Id' => "req-#{Fog::Mock.random_hex(32)}",
40
+ 'Content-Type' => 'application/json',
41
+ 'Content-Length' => Fog::Mock.random_numbers(3).to_s,
42
+ 'Date' => Date.new}
33
43
  response.body = {
34
- "security_group" => [{
35
- "rules" => [],
36
- "tenant_id" => "d5183375ab0343f3a0b4b05f547aefc2",
37
- "id" => 999,
38
- "name" => name,
39
- "description" => description
40
- }]
44
+ 'security_group' => self.data[:security_groups].values
41
45
  }
42
46
  response
43
47
  end