fog-ecloud 0.0.1

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 (286) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/.rubocop.yml +20 -0
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +17 -0
  7. data/CONTRIBUTING.md +18 -0
  8. data/CONTRIBUTORS.md +16 -0
  9. data/Gemfile +4 -0
  10. data/LICENSE.md +20 -0
  11. data/README.md +38 -0
  12. data/Rakefile +18 -0
  13. data/fog-ecloud.gemspec +35 -0
  14. data/gemfiles/Gemfile.1.9.2- +8 -0
  15. data/gemfiles/Gemfile.1.9.3+ +7 -0
  16. data/lib/fog/ecloud/collection.rb +24 -0
  17. data/lib/fog/ecloud/compute.rb +824 -0
  18. data/lib/fog/ecloud/core.rb +32 -0
  19. data/lib/fog/ecloud/generate_collection.rb +127 -0
  20. data/lib/fog/ecloud/ipaddr.rb +5 -0
  21. data/lib/fog/ecloud/mock_data_classes.rb +766 -0
  22. data/lib/fog/ecloud/model.rb +20 -0
  23. data/lib/fog/ecloud/models/compute/admin_organization.rb +43 -0
  24. data/lib/fog/ecloud/models/compute/admin_organizations.rb +21 -0
  25. data/lib/fog/ecloud/models/compute/api_key.rb +20 -0
  26. data/lib/fog/ecloud/models/compute/api_keys.rb +26 -0
  27. data/lib/fog/ecloud/models/compute/association.rb +23 -0
  28. data/lib/fog/ecloud/models/compute/associations.rb +34 -0
  29. data/lib/fog/ecloud/models/compute/authentication_level.rb +21 -0
  30. data/lib/fog/ecloud/models/compute/authentication_levels.rb +26 -0
  31. data/lib/fog/ecloud/models/compute/backup_internet_service.rb +45 -0
  32. data/lib/fog/ecloud/models/compute/backup_internet_services.rb +41 -0
  33. data/lib/fog/ecloud/models/compute/catalog.rb +39 -0
  34. data/lib/fog/ecloud/models/compute/catalog_configuration.rb +22 -0
  35. data/lib/fog/ecloud/models/compute/catalog_configurations.rb +26 -0
  36. data/lib/fog/ecloud/models/compute/catalog_item.rb +24 -0
  37. data/lib/fog/ecloud/models/compute/compute_pool.rb +70 -0
  38. data/lib/fog/ecloud/models/compute/compute_pools.rb +33 -0
  39. data/lib/fog/ecloud/models/compute/cpu_usage_detail.rb +16 -0
  40. data/lib/fog/ecloud/models/compute/cpu_usage_detail_summary.rb +26 -0
  41. data/lib/fog/ecloud/models/compute/detached_disk.rb +27 -0
  42. data/lib/fog/ecloud/models/compute/detached_disks.rb +26 -0
  43. data/lib/fog/ecloud/models/compute/environment.rb +111 -0
  44. data/lib/fog/ecloud/models/compute/environments.rb +39 -0
  45. data/lib/fog/ecloud/models/compute/firewall_acl.rb +27 -0
  46. data/lib/fog/ecloud/models/compute/firewall_acls.rb +27 -0
  47. data/lib/fog/ecloud/models/compute/group.rb +41 -0
  48. data/lib/fog/ecloud/models/compute/groups.rb +38 -0
  49. data/lib/fog/ecloud/models/compute/guest_process.rb +15 -0
  50. data/lib/fog/ecloud/models/compute/guest_processes.rb +26 -0
  51. data/lib/fog/ecloud/models/compute/hardware_configuration.rb +18 -0
  52. data/lib/fog/ecloud/models/compute/hardware_configurations.rb +26 -0
  53. data/lib/fog/ecloud/models/compute/internet_service.rb +97 -0
  54. data/lib/fog/ecloud/models/compute/internet_services.rb +44 -0
  55. data/lib/fog/ecloud/models/compute/ip_address.rb +39 -0
  56. data/lib/fog/ecloud/models/compute/ip_addresses.rb +32 -0
  57. data/lib/fog/ecloud/models/compute/layout.rb +20 -0
  58. data/lib/fog/ecloud/models/compute/layouts.rb +26 -0
  59. data/lib/fog/ecloud/models/compute/location.rb +22 -0
  60. data/lib/fog/ecloud/models/compute/locations.rb +28 -0
  61. data/lib/fog/ecloud/models/compute/login_banner.rb +16 -0
  62. data/lib/fog/ecloud/models/compute/login_banners.rb +26 -0
  63. data/lib/fog/ecloud/models/compute/memory_usage_detail.rb +16 -0
  64. data/lib/fog/ecloud/models/compute/memory_usage_detail_summary.rb +26 -0
  65. data/lib/fog/ecloud/models/compute/monitor.rb +46 -0
  66. data/lib/fog/ecloud/models/compute/monitors.rb +30 -0
  67. data/lib/fog/ecloud/models/compute/network.rb +46 -0
  68. data/lib/fog/ecloud/models/compute/networks.rb +32 -0
  69. data/lib/fog/ecloud/models/compute/node.rb +45 -0
  70. data/lib/fog/ecloud/models/compute/nodes.rb +42 -0
  71. data/lib/fog/ecloud/models/compute/operating_system.rb +16 -0
  72. data/lib/fog/ecloud/models/compute/operating_system_families.rb +26 -0
  73. data/lib/fog/ecloud/models/compute/operating_system_family.rb +21 -0
  74. data/lib/fog/ecloud/models/compute/operating_systems.rb +25 -0
  75. data/lib/fog/ecloud/models/compute/organization.rb +78 -0
  76. data/lib/fog/ecloud/models/compute/organizations.rb +38 -0
  77. data/lib/fog/ecloud/models/compute/password_complexity_rule.rb +49 -0
  78. data/lib/fog/ecloud/models/compute/password_complexity_rules.rb +26 -0
  79. data/lib/fog/ecloud/models/compute/physical_device.rb +21 -0
  80. data/lib/fog/ecloud/models/compute/physical_devices.rb +26 -0
  81. data/lib/fog/ecloud/models/compute/public_ip.rb +26 -0
  82. data/lib/fog/ecloud/models/compute/public_ips.rb +31 -0
  83. data/lib/fog/ecloud/models/compute/rnat.rb +27 -0
  84. data/lib/fog/ecloud/models/compute/rnats.rb +26 -0
  85. data/lib/fog/ecloud/models/compute/role.rb +23 -0
  86. data/lib/fog/ecloud/models/compute/roles.rb +36 -0
  87. data/lib/fog/ecloud/models/compute/row.rb +56 -0
  88. data/lib/fog/ecloud/models/compute/rows.rb +39 -0
  89. data/lib/fog/ecloud/models/compute/server.rb +323 -0
  90. data/lib/fog/ecloud/models/compute/server_configuration_option.rb +16 -0
  91. data/lib/fog/ecloud/models/compute/server_configuration_options.rb +26 -0
  92. data/lib/fog/ecloud/models/compute/servers.rb +65 -0
  93. data/lib/fog/ecloud/models/compute/ssh_key.rb +19 -0
  94. data/lib/fog/ecloud/models/compute/ssh_keys.rb +26 -0
  95. data/lib/fog/ecloud/models/compute/storage_usage_detail.rb +16 -0
  96. data/lib/fog/ecloud/models/compute/storage_usage_detail_summary.rb +26 -0
  97. data/lib/fog/ecloud/models/compute/support_ticket.rb +28 -0
  98. data/lib/fog/ecloud/models/compute/support_tickets.rb +26 -0
  99. data/lib/fog/ecloud/models/compute/tag.rb +13 -0
  100. data/lib/fog/ecloud/models/compute/tags.rb +26 -0
  101. data/lib/fog/ecloud/models/compute/task.rb +23 -0
  102. data/lib/fog/ecloud/models/compute/tasks.rb +29 -0
  103. data/lib/fog/ecloud/models/compute/template.rb +23 -0
  104. data/lib/fog/ecloud/models/compute/templates.rb +41 -0
  105. data/lib/fog/ecloud/models/compute/trusted_network_group.rb +33 -0
  106. data/lib/fog/ecloud/models/compute/trusted_network_groups.rb +27 -0
  107. data/lib/fog/ecloud/models/compute/user.rb +35 -0
  108. data/lib/fog/ecloud/models/compute/users.rb +26 -0
  109. data/lib/fog/ecloud/models/compute/virtual_machine_assigned_ip.rb +32 -0
  110. data/lib/fog/ecloud/models/compute/virtual_machine_assigned_ips.rb +26 -0
  111. data/lib/fog/ecloud/requests/compute/admin_disable_support_access.rb +9 -0
  112. data/lib/fog/ecloud/requests/compute/admin_edit_authentication_levels.rb +32 -0
  113. data/lib/fog/ecloud/requests/compute/admin_edit_login_banner.rb +30 -0
  114. data/lib/fog/ecloud/requests/compute/admin_edit_password_complexity_rules.rb +72 -0
  115. data/lib/fog/ecloud/requests/compute/admin_enable_support_access.rb +9 -0
  116. data/lib/fog/ecloud/requests/compute/backup_internet_service_create.rb +47 -0
  117. data/lib/fog/ecloud/requests/compute/backup_internet_service_delete.rb +9 -0
  118. data/lib/fog/ecloud/requests/compute/backup_internet_service_edit.rb +47 -0
  119. data/lib/fog/ecloud/requests/compute/compute_pool_edit.rb +35 -0
  120. data/lib/fog/ecloud/requests/compute/firewall_acls_create.rb +78 -0
  121. data/lib/fog/ecloud/requests/compute/firewall_acls_delete.rb +9 -0
  122. data/lib/fog/ecloud/requests/compute/get_admin_organization.rb +23 -0
  123. data/lib/fog/ecloud/requests/compute/get_api_key.rb +9 -0
  124. data/lib/fog/ecloud/requests/compute/get_api_keys.rb +9 -0
  125. data/lib/fog/ecloud/requests/compute/get_association.rb +9 -0
  126. data/lib/fog/ecloud/requests/compute/get_associations.rb +9 -0
  127. data/lib/fog/ecloud/requests/compute/get_authentication_level.rb +9 -0
  128. data/lib/fog/ecloud/requests/compute/get_authentication_levels.rb +9 -0
  129. data/lib/fog/ecloud/requests/compute/get_backup_internet_service.rb +9 -0
  130. data/lib/fog/ecloud/requests/compute/get_backup_internet_services.rb +9 -0
  131. data/lib/fog/ecloud/requests/compute/get_catalog.rb +9 -0
  132. data/lib/fog/ecloud/requests/compute/get_catalog_configuration.rb +9 -0
  133. data/lib/fog/ecloud/requests/compute/get_catalog_configurations.rb +9 -0
  134. data/lib/fog/ecloud/requests/compute/get_catalog_item.rb +9 -0
  135. data/lib/fog/ecloud/requests/compute/get_compute_pool.rb +21 -0
  136. data/lib/fog/ecloud/requests/compute/get_compute_pools.rb +31 -0
  137. data/lib/fog/ecloud/requests/compute/get_cpu_usage_detail.rb +9 -0
  138. data/lib/fog/ecloud/requests/compute/get_cpu_usage_detail_summary.rb +9 -0
  139. data/lib/fog/ecloud/requests/compute/get_detached_disk.rb +21 -0
  140. data/lib/fog/ecloud/requests/compute/get_detached_disks.rb +31 -0
  141. data/lib/fog/ecloud/requests/compute/get_environment.rb +31 -0
  142. data/lib/fog/ecloud/requests/compute/get_environments.rb +0 -0
  143. data/lib/fog/ecloud/requests/compute/get_firewall_acl.rb +9 -0
  144. data/lib/fog/ecloud/requests/compute/get_firewall_acls.rb +9 -0
  145. data/lib/fog/ecloud/requests/compute/get_group.rb +18 -0
  146. data/lib/fog/ecloud/requests/compute/get_groups.rb +18 -0
  147. data/lib/fog/ecloud/requests/compute/get_guest_process.rb +9 -0
  148. data/lib/fog/ecloud/requests/compute/get_guest_processes.rb +9 -0
  149. data/lib/fog/ecloud/requests/compute/get_hardware_configuration.rb +29 -0
  150. data/lib/fog/ecloud/requests/compute/get_hardware_configurations.rb +14 -0
  151. data/lib/fog/ecloud/requests/compute/get_internet_service.rb +21 -0
  152. data/lib/fog/ecloud/requests/compute/get_internet_services.rb +18 -0
  153. data/lib/fog/ecloud/requests/compute/get_ip_address.rb +20 -0
  154. data/lib/fog/ecloud/requests/compute/get_layout.rb +18 -0
  155. data/lib/fog/ecloud/requests/compute/get_layouts.rb +18 -0
  156. data/lib/fog/ecloud/requests/compute/get_location.rb +9 -0
  157. data/lib/fog/ecloud/requests/compute/get_locations.rb +9 -0
  158. data/lib/fog/ecloud/requests/compute/get_login_banner.rb +9 -0
  159. data/lib/fog/ecloud/requests/compute/get_login_banners.rb +9 -0
  160. data/lib/fog/ecloud/requests/compute/get_memory_usage_detail.rb +9 -0
  161. data/lib/fog/ecloud/requests/compute/get_memory_usage_detail_summary.rb +9 -0
  162. data/lib/fog/ecloud/requests/compute/get_monitor.rb +9 -0
  163. data/lib/fog/ecloud/requests/compute/get_monitors.rb +9 -0
  164. data/lib/fog/ecloud/requests/compute/get_network.rb +21 -0
  165. data/lib/fog/ecloud/requests/compute/get_network_summary.rb +9 -0
  166. data/lib/fog/ecloud/requests/compute/get_networks.rb +30 -0
  167. data/lib/fog/ecloud/requests/compute/get_node.rb +21 -0
  168. data/lib/fog/ecloud/requests/compute/get_nodes.rb +18 -0
  169. data/lib/fog/ecloud/requests/compute/get_operating_system.rb +24 -0
  170. data/lib/fog/ecloud/requests/compute/get_operating_system_families.rb +30 -0
  171. data/lib/fog/ecloud/requests/compute/get_organization.rb +24 -0
  172. data/lib/fog/ecloud/requests/compute/get_organizations.rb +23 -0
  173. data/lib/fog/ecloud/requests/compute/get_password_complexity_rule.rb +9 -0
  174. data/lib/fog/ecloud/requests/compute/get_password_complexity_rules.rb +9 -0
  175. data/lib/fog/ecloud/requests/compute/get_physical_device.rb +9 -0
  176. data/lib/fog/ecloud/requests/compute/get_physical_devices.rb +9 -0
  177. data/lib/fog/ecloud/requests/compute/get_process.rb +9 -0
  178. data/lib/fog/ecloud/requests/compute/get_processes.rb +9 -0
  179. data/lib/fog/ecloud/requests/compute/get_public_ip.rb +21 -0
  180. data/lib/fog/ecloud/requests/compute/get_public_ips.rb +31 -0
  181. data/lib/fog/ecloud/requests/compute/get_rnat.rb +9 -0
  182. data/lib/fog/ecloud/requests/compute/get_rnats.rb +9 -0
  183. data/lib/fog/ecloud/requests/compute/get_role.rb +9 -0
  184. data/lib/fog/ecloud/requests/compute/get_roles.rb +9 -0
  185. data/lib/fog/ecloud/requests/compute/get_row.rb +18 -0
  186. data/lib/fog/ecloud/requests/compute/get_rows.rb +12 -0
  187. data/lib/fog/ecloud/requests/compute/get_server.rb +21 -0
  188. data/lib/fog/ecloud/requests/compute/get_server_configuration_option.rb +9 -0
  189. data/lib/fog/ecloud/requests/compute/get_server_configuration_options.rb +9 -0
  190. data/lib/fog/ecloud/requests/compute/get_servers.rb +42 -0
  191. data/lib/fog/ecloud/requests/compute/get_ssh_key.rb +21 -0
  192. data/lib/fog/ecloud/requests/compute/get_ssh_keys.rb +30 -0
  193. data/lib/fog/ecloud/requests/compute/get_storage_usage_detail.rb +9 -0
  194. data/lib/fog/ecloud/requests/compute/get_storage_usage_detail_summary.rb +9 -0
  195. data/lib/fog/ecloud/requests/compute/get_support_ticket.rb +9 -0
  196. data/lib/fog/ecloud/requests/compute/get_support_tickets.rb +9 -0
  197. data/lib/fog/ecloud/requests/compute/get_tag.rb +9 -0
  198. data/lib/fog/ecloud/requests/compute/get_tags.rb +9 -0
  199. data/lib/fog/ecloud/requests/compute/get_task.rb +13 -0
  200. data/lib/fog/ecloud/requests/compute/get_tasks.rb +9 -0
  201. data/lib/fog/ecloud/requests/compute/get_template.rb +21 -0
  202. data/lib/fog/ecloud/requests/compute/get_templates.rb +48 -0
  203. data/lib/fog/ecloud/requests/compute/get_trusted_network_group.rb +9 -0
  204. data/lib/fog/ecloud/requests/compute/get_trusted_network_groups.rb +9 -0
  205. data/lib/fog/ecloud/requests/compute/get_user.rb +9 -0
  206. data/lib/fog/ecloud/requests/compute/get_users.rb +9 -0
  207. data/lib/fog/ecloud/requests/compute/get_virtual_machine_assigned_ips.rb +42 -0
  208. data/lib/fog/ecloud/requests/compute/groups_create.rb +31 -0
  209. data/lib/fog/ecloud/requests/compute/groups_delete.rb +26 -0
  210. data/lib/fog/ecloud/requests/compute/groups_edit.rb +29 -0
  211. data/lib/fog/ecloud/requests/compute/groups_movedown.rb +9 -0
  212. data/lib/fog/ecloud/requests/compute/groups_moveup.rb +9 -0
  213. data/lib/fog/ecloud/requests/compute/internet_service_create.rb +102 -0
  214. data/lib/fog/ecloud/requests/compute/internet_service_delete.rb +33 -0
  215. data/lib/fog/ecloud/requests/compute/internet_service_edit.rb +58 -0
  216. data/lib/fog/ecloud/requests/compute/monitors_create_default.rb +9 -0
  217. data/lib/fog/ecloud/requests/compute/monitors_create_ecv.rb +40 -0
  218. data/lib/fog/ecloud/requests/compute/monitors_create_http.rb +44 -0
  219. data/lib/fog/ecloud/requests/compute/monitors_create_loopback.rb +9 -0
  220. data/lib/fog/ecloud/requests/compute/monitors_create_ping.rb +35 -0
  221. data/lib/fog/ecloud/requests/compute/monitors_disable.rb +9 -0
  222. data/lib/fog/ecloud/requests/compute/monitors_edit_ecv.rb +40 -0
  223. data/lib/fog/ecloud/requests/compute/monitors_edit_http.rb +44 -0
  224. data/lib/fog/ecloud/requests/compute/monitors_edit_ping.rb +35 -0
  225. data/lib/fog/ecloud/requests/compute/monitors_enable.rb +9 -0
  226. data/lib/fog/ecloud/requests/compute/node_service_create.rb +93 -0
  227. data/lib/fog/ecloud/requests/compute/node_service_delete.rb +33 -0
  228. data/lib/fog/ecloud/requests/compute/node_service_edit.rb +39 -0
  229. data/lib/fog/ecloud/requests/compute/power_off.rb +9 -0
  230. data/lib/fog/ecloud/requests/compute/power_on.rb +9 -0
  231. data/lib/fog/ecloud/requests/compute/power_reset.rb +9 -0
  232. data/lib/fog/ecloud/requests/compute/power_shutdown.rb +9 -0
  233. data/lib/fog/ecloud/requests/compute/public_ip_activate.rb +9 -0
  234. data/lib/fog/ecloud/requests/compute/rnat_associations_create_device.rb +32 -0
  235. data/lib/fog/ecloud/requests/compute/rnat_associations_delete.rb +9 -0
  236. data/lib/fog/ecloud/requests/compute/rnat_associations_edit_network.rb +31 -0
  237. data/lib/fog/ecloud/requests/compute/rows_create.rb +29 -0
  238. data/lib/fog/ecloud/requests/compute/rows_delete.rb +21 -0
  239. data/lib/fog/ecloud/requests/compute/rows_edit.rb +29 -0
  240. data/lib/fog/ecloud/requests/compute/rows_movedown.rb +9 -0
  241. data/lib/fog/ecloud/requests/compute/rows_moveup.rb +9 -0
  242. data/lib/fog/ecloud/requests/compute/trusted_network_groups_create.rb +51 -0
  243. data/lib/fog/ecloud/requests/compute/trusted_network_groups_delete.rb +9 -0
  244. data/lib/fog/ecloud/requests/compute/trusted_network_groups_edit.rb +51 -0
  245. data/lib/fog/ecloud/requests/compute/virtual_machine_attach_disk.rb +61 -0
  246. data/lib/fog/ecloud/requests/compute/virtual_machine_copy.rb +116 -0
  247. data/lib/fog/ecloud/requests/compute/virtual_machine_copy_identical.rb +43 -0
  248. data/lib/fog/ecloud/requests/compute/virtual_machine_create_from_template.rb +244 -0
  249. data/lib/fog/ecloud/requests/compute/virtual_machine_delete.rb +46 -0
  250. data/lib/fog/ecloud/requests/compute/virtual_machine_detach_disk.rb +70 -0
  251. data/lib/fog/ecloud/requests/compute/virtual_machine_edit.rb +45 -0
  252. data/lib/fog/ecloud/requests/compute/virtual_machine_edit_assigned_ips.rb +80 -0
  253. data/lib/fog/ecloud/requests/compute/virtual_machine_edit_hardware_configuration.rb +75 -0
  254. data/lib/fog/ecloud/requests/compute/virtual_machine_import.rb +179 -0
  255. data/lib/fog/ecloud/requests/compute/virtual_machine_upload_file.rb +28 -0
  256. data/lib/fog/ecloud/version.rb +5 -0
  257. data/lib/fog/ecloud.rb +8 -0
  258. data/spec/minitest_helper.rb +31 -0
  259. data/tests/compute/helper.rb +27 -0
  260. data/tests/compute/models/admin_organization_tests.rb +16 -0
  261. data/tests/compute/models/compute_pool_tests.rb +17 -0
  262. data/tests/compute/models/detached_disk_tests.rb +26 -0
  263. data/tests/compute/models/environment_tests.rb +23 -0
  264. data/tests/compute/models/internet_service_tests.rb +28 -0
  265. data/tests/compute/models/ip_address_tests.rb +19 -0
  266. data/tests/compute/models/network_tests.rb +17 -0
  267. data/tests/compute/models/operating_system_families_tests.rb +13 -0
  268. data/tests/compute/models/operating_system_tests.rb +22 -0
  269. data/tests/compute/models/organization_tests.rb +21 -0
  270. data/tests/compute/models/public_ip_tests.rb +19 -0
  271. data/tests/compute/models/server_tests.rb +25 -0
  272. data/tests/compute/models/ssh_key_tests.rb +19 -0
  273. data/tests/compute/models/template_tests.rb +20 -0
  274. data/tests/helper.rb +24 -0
  275. data/tests/helpers/collection_helper.rb +97 -0
  276. data/tests/helpers/compute/flavors_helper.rb +32 -0
  277. data/tests/helpers/compute/server_helper.rb +25 -0
  278. data/tests/helpers/compute/servers_helper.rb +10 -0
  279. data/tests/helpers/formats_helper.rb +98 -0
  280. data/tests/helpers/formats_helper_tests.rb +110 -0
  281. data/tests/helpers/mock_helper.rb +115 -0
  282. data/tests/helpers/model_helper.rb +31 -0
  283. data/tests/helpers/responds_to_helper.rb +11 -0
  284. data/tests/helpers/schema_validator_tests.rb +107 -0
  285. data/tests/helpers/succeeds_helper.rb +9 -0
  286. metadata +457 -0
@@ -0,0 +1,766 @@
1
+ module Fog
2
+ module Ecloud
3
+ module MockDataClasses
4
+ class Base < Hash
5
+ def self.base_url=(url)
6
+ @base_url = url
7
+ end
8
+
9
+ self.base_url = "http://vcloud.example.com"
10
+
11
+ def self.base_url
12
+ @base_url
13
+ end
14
+
15
+ def first
16
+ raise "Don't do this"
17
+ end
18
+
19
+ def last
20
+ raise "Don't do this"
21
+ end
22
+
23
+ def initialize(data = {}, parent = nil)
24
+ @parent = parent
25
+
26
+ replace(data)
27
+ end
28
+
29
+ def _parent
30
+ @parent
31
+ end
32
+
33
+ def base_url
34
+ Base.base_url
35
+ end
36
+
37
+ def href
38
+ [base_url, self.class.name.split("::").last, object_id].join("/")
39
+ end
40
+
41
+ def inspect
42
+ "<#{self.class.name} #{object_id} data=#{super}>"
43
+ end
44
+ end
45
+
46
+ class MockData < Base
47
+ def versions
48
+ @versions ||= []
49
+ end
50
+
51
+ def organizations
52
+ @organizations ||= []
53
+ end
54
+
55
+ def organization_collection_from_href(href)
56
+ find_href_in(href, all_organizations)
57
+ end
58
+
59
+ def all_organizations
60
+ organizations.map(&:environments).flatten
61
+ end
62
+
63
+ def organization_from_href(href)
64
+ find_href_in(href, all_organizations)
65
+ end
66
+
67
+ def all_vdcs
68
+ organizations.map(&:environments).flatten
69
+ end
70
+
71
+ def vdc_from_href(href)
72
+ find_href_in(href, all_vdcs)
73
+ end
74
+
75
+ def all_catalogs
76
+ all_vdcs.map(&:catalog).flatten
77
+ end
78
+
79
+ def catalog_from_href(href)
80
+ find_href_in(href, all_catalogs)
81
+ end
82
+
83
+ def all_catalog_items
84
+ all_catalogs.map(&:items).flatten
85
+ end
86
+
87
+ def catalog_item_from_href(href)
88
+ find_href_in(href, all_catalog_items)
89
+ end
90
+
91
+ def all_virtual_machines
92
+ all_vdcs.map(&:virtual_machines).flatten
93
+ end
94
+
95
+ def virtual_machine_from_href(href)
96
+ find_href_prefixed_in(href, all_virtual_machines)
97
+ end
98
+
99
+ def all_networks
100
+ all_vdcs.map(&:networks).flatten
101
+ end
102
+
103
+ def network_from_href(href)
104
+ find_href_in(href, all_networks)
105
+ end
106
+
107
+ def all_network_extensions
108
+ all_networks.map(&:extensions).flatten
109
+ end
110
+
111
+ def network_extension_from_href(href)
112
+ find_href_in(href, all_network_extensions)
113
+ end
114
+
115
+ def all_vdc_internet_service_collections
116
+ all_vdcs.map(&:internet_service_collection).flatten
117
+ end
118
+
119
+ def vdc_internet_service_collection_from_href(href)
120
+ find_href_in(href, all_vdc_internet_service_collections)
121
+ end
122
+
123
+ def all_backup_internet_services
124
+ all_vdc_internet_service_collections.map(&:backup_internet_services).flatten
125
+ end
126
+
127
+ def backup_internet_service_from_href(href)
128
+ find_href_in(href, all_backup_internet_services)
129
+ end
130
+
131
+ def all_public_ip_collections
132
+ all_vdcs.map {|v| v.public_ip_collection }.flatten
133
+ end
134
+
135
+ def public_ip_collection_from_href(href)
136
+ find_href_in(href, all_public_ip_collections)
137
+ end
138
+
139
+ def all_public_ips
140
+ all_public_ip_collections.map(&:items).flatten
141
+ end
142
+
143
+ def public_ip_from_href(href)
144
+ find_href_in(href, all_public_ips)
145
+ end
146
+
147
+ def all_public_ip_internet_service_collections
148
+ all_public_ips.map(&:internet_service_collection).flatten
149
+ end
150
+
151
+ def public_ip_internet_service_collection_from_href(href)
152
+ find_href_in(href, all_public_ip_internet_service_collections)
153
+ end
154
+
155
+ def all_public_ip_internet_services
156
+ all_public_ip_internet_service_collections.map(&:items).flatten
157
+ end
158
+
159
+ def public_ip_internet_service_from_href(href)
160
+ find_href_in(href, all_public_ip_internet_services)
161
+ end
162
+
163
+ def all_public_ip_internet_service_node_collections
164
+ all_public_ip_internet_services.map(&:node_collection).flatten
165
+ end
166
+
167
+ def public_ip_internet_service_node_collection_from_href(href)
168
+ find_href_in(href, all_public_ip_internet_service_node_collections)
169
+ end
170
+
171
+ def all_public_ip_internet_service_nodes
172
+ all_public_ip_internet_service_node_collections.map(&:items).flatten
173
+ end
174
+
175
+ def public_ip_internet_service_node_from_href(href)
176
+ find_href_in(href, all_public_ip_internet_service_nodes)
177
+ end
178
+
179
+ def all_network_ip_collections
180
+ all_networks.map(&:ip_collection)
181
+ end
182
+
183
+ def network_ip_collection_from_href(href)
184
+ find_href_in(href, all_network_ip_collections)
185
+ end
186
+
187
+ def all_network_ips
188
+ all_network_ip_collections.map {|c| c.items.values }.flatten
189
+ end
190
+
191
+ def network_ip_from_href(href)
192
+ find_href_in(href, all_network_ips)
193
+ end
194
+
195
+ private
196
+
197
+ def find_href_in(href, objects)
198
+ objects.find {|o| o.href == href }
199
+ end
200
+
201
+ def find_href_prefixed_in(href, objects)
202
+ objects.find {|o| href =~ %r{^#{o.href}($|/)} }
203
+ end
204
+ end
205
+
206
+ class MockVersion < Base
207
+ def version
208
+ self[:version]
209
+ end
210
+
211
+ def supported
212
+ !!self[:supported]
213
+ end
214
+
215
+ def login_url
216
+ href
217
+ end
218
+ end
219
+
220
+ class MockOrganization < Base
221
+ def name
222
+ self[:name]
223
+ end
224
+
225
+ def environments
226
+ @vdcs ||= []
227
+ end
228
+ end
229
+
230
+ class MockVdc < Base
231
+ def name
232
+ self[:name]
233
+ end
234
+
235
+ def storage_allocated
236
+ self[:storage_allocated] || 200
237
+ end
238
+
239
+ def storage_used
240
+ self[:storage_used] || 105
241
+ end
242
+
243
+ def cpu_allocated
244
+ self[:cpu_allocated] || 10000
245
+ end
246
+
247
+ def memory_allocated
248
+ self[:memory_allocated] || 20480
249
+ end
250
+
251
+ def catalog
252
+ @catalog ||= MockCatalog.new({}, self)
253
+ end
254
+
255
+ def networks
256
+ @networks ||= []
257
+ end
258
+
259
+ def virtual_machines
260
+ @virtual_machines ||= []
261
+ end
262
+
263
+ def task_list
264
+ @task_list ||= MockTaskList.new({}, self)
265
+ end
266
+
267
+ # for TM eCloud, should probably be subclassed
268
+ def public_ip_collection
269
+ @public_ip_collection ||= MockPublicIps.new({}, self)
270
+ end
271
+
272
+ def internet_service_collection
273
+ @internet_service_collection ||= MockVdcInternetServices.new({}, self)
274
+ end
275
+
276
+ def firewall_acls
277
+ @firewall_acls ||= MockFirewallAcls.new({}, self)
278
+ end
279
+ end
280
+
281
+ class MockTaskList < Base
282
+ def name
283
+ self[:name] || "Tasks List"
284
+ end
285
+ end
286
+
287
+ class MockCatalog < Base
288
+ def name
289
+ self[:name] || "Catalog"
290
+ end
291
+
292
+ def items
293
+ @items ||= []
294
+ end
295
+ end
296
+
297
+ class MockCatalogItem < Base
298
+ def name
299
+ self[:name]
300
+ end
301
+
302
+ def disks
303
+ @disks ||= MockVirtualMachineDisks.new(self)
304
+ end
305
+
306
+ def customization
307
+ @customization ||= MockCatalogItemCustomization.new({}, self)
308
+ end
309
+
310
+ def vapp_template
311
+ @vapp_template ||= MockCatalogItemVappTemplate.new({ :name => name }, self)
312
+ end
313
+ end
314
+
315
+ class MockCatalogItemCustomization < Base
316
+ def name
317
+ self[:name] || "Customization Options"
318
+ end
319
+ end
320
+
321
+ class MockCatalogItemVappTemplate < Base
322
+ def name
323
+ self[:name]
324
+ end
325
+ end
326
+
327
+ class MockNetwork < Base
328
+ def name
329
+ self[:name] || subnet
330
+ end
331
+
332
+ def subnet
333
+ self[:subnet]
334
+ end
335
+
336
+ def gateway
337
+ self[:gateway] || subnet_ips[1]
338
+ end
339
+
340
+ def netmask
341
+ self[:netmask] || subnet_ipaddr.mask
342
+ end
343
+
344
+ def dns
345
+ "8.8.8.8"
346
+ end
347
+
348
+ def features
349
+ [
350
+ { :type => :FenceMode, :value => "isolated" }
351
+ ]
352
+ end
353
+
354
+ def ip_collection
355
+ @ip_collection ||= MockNetworkIps.new({}, self)
356
+ end
357
+
358
+ def extensions
359
+ @extensions ||= MockNetworkExtensions.new({}, self)
360
+ end
361
+
362
+ def random_ip
363
+ usable_subnet_ips[rand(usable_subnet_ips.length)]
364
+ end
365
+
366
+ # for TM eCloud. should probably be a subclass
367
+ def rnat
368
+ self[:rnat]
369
+ end
370
+
371
+ def usable_subnet_ips
372
+ subnet_ips[3..-2]
373
+ end
374
+
375
+ def address
376
+ subnet_ips.first
377
+ end
378
+
379
+ def broadcast
380
+ subnet_ips.last
381
+ end
382
+
383
+ private
384
+
385
+ def subnet_ipaddr
386
+ @ipaddr ||= IPAddr.new(subnet)
387
+ end
388
+
389
+ def subnet_ips
390
+ subnet_ipaddr.to_range.to_a.map(&:to_s)
391
+ end
392
+ end
393
+
394
+ class MockNetworkIps < Base
395
+ def items
396
+ @items ||= _parent.usable_subnet_ips.reduce({}) do |out, subnet_ip|
397
+ out.update(subnet_ip => MockNetworkIp.new({ :ip => subnet_ip }, self))
398
+ end
399
+ end
400
+
401
+ def ordered_ips
402
+ items.values.sort_by {|i| i.ip.split(".").map(&:to_i) }
403
+ end
404
+
405
+ def name
406
+ "IP Addresses"
407
+ end
408
+ end
409
+
410
+ class MockNetworkIp < Base
411
+ def name
412
+ self[:name] || ip
413
+ end
414
+
415
+ def ip
416
+ self[:ip]
417
+ end
418
+
419
+ def used_by
420
+ self[:used_by] || _parent._parent._parent.virtual_machines.find {|v| v.ip == ip }
421
+ end
422
+
423
+ def status
424
+ if used_by
425
+ "Assigned"
426
+ else
427
+ "Available"
428
+ end
429
+ end
430
+
431
+ def rnat
432
+ self[:rnat] || _parent._parent.rnat
433
+ end
434
+
435
+ def rnat_set?
436
+ !!self[:rnat]
437
+ end
438
+ end
439
+
440
+ class MockNetworkExtensions < Base
441
+ def name
442
+ _parent.name
443
+ end
444
+
445
+ def gateway
446
+ _parent.gateway
447
+ end
448
+
449
+ def broadcast
450
+ _parent.broadcast
451
+ end
452
+
453
+ def address
454
+ _parent.address
455
+ end
456
+
457
+ def rnat
458
+ _parent.rnat
459
+ end
460
+
461
+ def type
462
+ self[:type] || "DMZ"
463
+ end
464
+
465
+ def vlan
466
+ object_id.to_s
467
+ end
468
+
469
+ def friendly_name
470
+ "#{name} (#{type}_#{object_id})"
471
+ end
472
+ end
473
+
474
+ class MockVirtualMachine < Base
475
+ def name
476
+ self[:name]
477
+ end
478
+
479
+ def ip
480
+ self[:ip]
481
+ end
482
+
483
+ def cpus
484
+ self[:cpus] || 1
485
+ end
486
+
487
+ def memory
488
+ self[:memory] || 1024
489
+ end
490
+
491
+ def disks
492
+ @disks ||= MockVirtualMachineDisks.new(self)
493
+ end
494
+
495
+ def status
496
+ self[:status] || 2
497
+ end
498
+
499
+ def power_off!
500
+ self[:status] = 2
501
+ end
502
+
503
+ def power_on!
504
+ self[:status] = 4
505
+ end
506
+
507
+ def size
508
+ disks.reduce(0) {|s, d| s + d.vcloud_size }
509
+ end
510
+
511
+ def network_ip
512
+ if network = _parent.networks.find {|n| n.ip_collection.items[ip] }
513
+ network.ip_collection.items[ip]
514
+ end
515
+ end
516
+
517
+ # from fog ecloud server's _compose_vapp_data
518
+ def to_configure_vapp_hash
519
+ {
520
+ :name => name,
521
+ :cpus => cpus,
522
+ :memory => memory,
523
+ :disks => disks.map {|d| { :number => d.address.to_s, :size => d.vcloud_size, :resource => d.vcloud_size.to_s } }
524
+ }
525
+ end
526
+
527
+ def href(purpose = :base)
528
+ case purpose
529
+ when :base
530
+ super()
531
+ when :power_on
532
+ super() + "/power/action/powerOn"
533
+ when :power_off
534
+ super() + "/power/action/powerOff"
535
+ end
536
+ end
537
+ end
538
+
539
+ class MockVirtualMachineDisks < Array
540
+ def initialize(parent = nil)
541
+ @parent = parent
542
+ end
543
+
544
+ def _parent
545
+ @parent
546
+ end
547
+
548
+ def <<(disk)
549
+ next_address = 0
550
+ disk_with_max_address = max {|a, b| a[:address] <=> b[:address] }
551
+ disk_with_max_address && next_address = disk_with_max_address.address + 1
552
+ disk[:address] ||= next_address
553
+
554
+ super(disk)
555
+
556
+ if (addresses = map {|d| d.address }).uniq.size != size
557
+ raise "Duplicate disk address in: #{addresses.inspect} (#{size})"
558
+ end
559
+
560
+ sort! {|a, b| a.address <=> b.address }
561
+ self
562
+ end
563
+
564
+ def at_address(address)
565
+ find {|d| d.address == address }
566
+ end
567
+ end
568
+
569
+ class MockVirtualMachineDisk < Base
570
+ def size
571
+ self[:size].to_i
572
+ end
573
+
574
+ def vcloud_size
575
+ # kilobytes
576
+ size * 1024
577
+ end
578
+
579
+ def address
580
+ self[:address].to_i
581
+ end
582
+ end
583
+
584
+ # for Terremark eCloud
585
+
586
+ class MockVdcInternetServices < Base
587
+ def href
588
+ _parent.href + "/internetServices"
589
+ end
590
+
591
+ def name
592
+ "Internet Services"
593
+ end
594
+
595
+ def items
596
+ public_ip_internet_services + backup_internet_services
597
+ end
598
+
599
+ def public_ip_internet_services
600
+ _parent.public_ip_collection.items.reduce([]) do |services, public_ip|
601
+ services + public_ip.internet_service_collection.items
602
+ end
603
+ end
604
+
605
+ def backup_internet_services
606
+ @backup_internet_services ||= []
607
+ end
608
+ end
609
+
610
+ class MockBackupInternetService < Base
611
+ def name
612
+ self[:name] || "Backup Internet Service #{object_id}"
613
+ end
614
+
615
+ def protocol
616
+ self[:protocol]
617
+ end
618
+
619
+ def port
620
+ 0
621
+ end
622
+
623
+ def enabled
624
+ self[:enabled].to_s.downcase != "false"
625
+ end
626
+
627
+ def timeout
628
+ self[:timeout] || 2
629
+ end
630
+
631
+ def description
632
+ self[:description] || "Description for Backup Service #{name}"
633
+ end
634
+
635
+ def redirect_url
636
+ nil
637
+ end
638
+
639
+ def node_collection
640
+ @node_collection ||= MockPublicIpInternetServiceNodes.new({}, self)
641
+ end
642
+ end
643
+
644
+ class MockFirewallAcls < Base
645
+ def name
646
+ "Firewall Access List"
647
+ end
648
+ end
649
+
650
+ class MockPublicIps < Base
651
+ def name
652
+ self[:name] || "Public IPs"
653
+ end
654
+
655
+ def items
656
+ @items ||= []
657
+ end
658
+ end
659
+
660
+ class MockPublicIp < Base
661
+ def name
662
+ self[:name]
663
+ end
664
+
665
+ def internet_service_collection
666
+ @internet_service_collection ||= MockPublicIpInternetServices.new({}, self)
667
+ end
668
+ end
669
+
670
+ class MockPublicIpInternetServices < Base
671
+ def href
672
+ _parent.href + "/internetServices"
673
+ end
674
+
675
+ def items
676
+ @items ||= []
677
+ end
678
+ end
679
+
680
+ class MockPublicIpInternetService < Base
681
+ def name
682
+ self[:name] || "Public IP Service #{object_id}"
683
+ end
684
+
685
+ def description
686
+ self[:description] || "Description for Public IP Service #{name}"
687
+ end
688
+
689
+ def protocol
690
+ self[:protocol]
691
+ end
692
+
693
+ def port
694
+ self[:port]
695
+ end
696
+
697
+ def enabled
698
+ !!self[:enabled]
699
+ end
700
+
701
+ def redirect_url
702
+ self[:redirect_url]
703
+ end
704
+
705
+ def timeout
706
+ self[:timeout] || 2
707
+ end
708
+
709
+ def node_collection
710
+ @node_collection ||= MockPublicIpInternetServiceNodes.new({}, self)
711
+ end
712
+
713
+ def monitor
714
+ nil
715
+ end
716
+
717
+ def backup_service
718
+ self[:backup_service]
719
+ end
720
+ end
721
+
722
+ class MockPublicIpInternetServiceNodes < Base
723
+ def href
724
+ _parent.href + "/nodeServices"
725
+ end
726
+
727
+ def items
728
+ @items ||= [].tap do |node_array|
729
+ node_array.instance_variable_set("@default_port", _parent.port)
730
+
731
+ def node_array.<<(node)
732
+ node[:port] ||= @default_port
733
+ super
734
+ end
735
+ end
736
+ end
737
+ end
738
+
739
+ class MockPublicIpInternetServiceNode < Base
740
+ def ip_address
741
+ self[:ip_address]
742
+ end
743
+
744
+ def name
745
+ self[:name] || "Public IP Service Node #{object_id}"
746
+ end
747
+
748
+ def description
749
+ self[:description] || "Description for Public IP Service Node #{name}"
750
+ end
751
+
752
+ def port
753
+ self[:port]
754
+ end
755
+
756
+ def enabled
757
+ self[:enabled].to_s.downcase != "false"
758
+ end
759
+
760
+ def enabled=(new_value)
761
+ self[:enabled] = new_value
762
+ end
763
+ end
764
+ end
765
+ end
766
+ end