fog 0.5.3 → 0.6.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 (388) hide show
  1. data/.gitignore +1 -0
  2. data/Gemfile.lock +3 -3
  3. data/bin/fog +0 -5
  4. data/changelog.txt +88 -0
  5. data/fog.gemspec +3 -3
  6. data/lib/fog.rb +1 -2
  7. data/lib/fog/aws/elb.rb +2 -0
  8. data/lib/fog/aws/iam.rb +7 -0
  9. data/lib/fog/aws/parsers/iam/get_group.rb +55 -0
  10. data/lib/fog/aws/parsers/iam/get_user_policy.rb +27 -0
  11. data/lib/fog/aws/parsers/iam/update_group.rb +26 -0
  12. data/lib/fog/aws/parsers/iam/update_user.rb +27 -0
  13. data/lib/fog/aws/requests/iam/create_access_key.rb +1 -1
  14. data/lib/fog/aws/requests/iam/get_group.rb +44 -0
  15. data/lib/fog/aws/requests/iam/get_user_policy.rb +36 -0
  16. data/lib/fog/aws/requests/iam/update_group.rb +39 -0
  17. data/lib/fog/aws/requests/iam/update_signing_certificate.rb +32 -0
  18. data/lib/fog/aws/requests/iam/update_user.rb +39 -0
  19. data/lib/fog/aws/ses.rb +2 -0
  20. data/lib/fog/aws/simpledb.rb +2 -0
  21. data/lib/fog/bin.rb +3 -8
  22. data/lib/fog/bin/aws.rb +2 -14
  23. data/lib/fog/bin/bluebox.rb +6 -8
  24. data/lib/fog/bin/dnsimple.rb +30 -0
  25. data/lib/fog/bin/ecloud.rb +30 -0
  26. data/lib/fog/bin/go_grid.rb +1 -7
  27. data/lib/fog/bin/linode.rb +0 -6
  28. data/lib/fog/bin/local.rb +1 -7
  29. data/lib/fog/bin/new_servers.rb +1 -7
  30. data/lib/fog/bin/rackspace.rb +2 -14
  31. data/lib/fog/bin/slicehost.rb +2 -8
  32. data/lib/fog/bin/terremark.rb +0 -5
  33. data/lib/fog/bin/voxel.rb +30 -0
  34. data/lib/fog/cdn/aws.rb +2 -0
  35. data/lib/fog/compute.rb +6 -3
  36. data/lib/fog/compute/aws.rb +4 -18
  37. data/lib/fog/compute/ecloud.rb +1306 -0
  38. data/lib/fog/compute/models/aws/key_pair.rb +0 -2
  39. data/lib/fog/compute/models/aws/security_group.rb +4 -4
  40. data/lib/fog/compute/models/aws/server.rb +13 -3
  41. data/lib/fog/compute/models/aws/snapshot.rb +0 -2
  42. data/lib/fog/compute/models/aws/volume.rb +0 -2
  43. data/lib/fog/compute/models/bluebox/server.rb +23 -11
  44. data/lib/fog/compute/models/brightbox/server.rb +8 -0
  45. data/lib/fog/compute/models/ecloud/backup_internet_service.rb +56 -0
  46. data/lib/fog/compute/models/ecloud/backup_internet_services.rb +33 -0
  47. data/lib/fog/compute/models/ecloud/catalog.rb +28 -0
  48. data/lib/fog/compute/models/ecloud/catalog_item.rb +29 -0
  49. data/lib/fog/compute/models/ecloud/firewall_acl.rb +24 -0
  50. data/lib/fog/compute/models/ecloud/firewall_acls.rb +31 -0
  51. data/lib/fog/compute/models/ecloud/internet_service.rb +117 -0
  52. data/lib/fog/compute/models/ecloud/internet_services.rb +33 -0
  53. data/lib/fog/compute/models/ecloud/ip.rb +49 -0
  54. data/lib/fog/compute/models/ecloud/ips.rb +32 -0
  55. data/lib/fog/compute/models/ecloud/network.rb +72 -0
  56. data/lib/fog/compute/models/ecloud/networks.rb +33 -0
  57. data/lib/fog/compute/models/ecloud/node.rb +43 -0
  58. data/lib/fog/compute/models/ecloud/nodes.rb +31 -0
  59. data/lib/fog/compute/models/ecloud/public_ip.rb +22 -0
  60. data/lib/fog/compute/models/ecloud/public_ips.rb +36 -0
  61. data/lib/fog/compute/models/ecloud/server.rb +209 -0
  62. data/lib/fog/compute/models/ecloud/servers.rb +55 -0
  63. data/lib/fog/compute/models/ecloud/task.rb +21 -0
  64. data/lib/fog/compute/models/ecloud/tasks.rb +31 -0
  65. data/lib/fog/compute/models/ecloud/vdc.rb +81 -0
  66. data/lib/fog/compute/models/ecloud/vdcs.rb +40 -0
  67. data/lib/fog/compute/models/go_grid/server.rb +15 -1
  68. data/lib/fog/compute/models/rackspace/server.rb +16 -0
  69. data/lib/fog/compute/models/slicehost/server.rb +16 -0
  70. data/lib/fog/compute/models/voxel/image.rb +12 -0
  71. data/lib/fog/compute/models/voxel/images.rb +30 -0
  72. data/lib/fog/compute/models/voxel/server.rb +77 -0
  73. data/lib/fog/compute/models/voxel/servers.rb +31 -0
  74. data/lib/fog/compute/new_servers.rb +2 -2
  75. data/lib/fog/compute/parsers/voxel/basic.rb +31 -0
  76. data/lib/fog/compute/parsers/voxel/devices_list.rb +111 -0
  77. data/lib/fog/compute/parsers/voxel/images_list.rb +59 -0
  78. data/lib/fog/compute/parsers/voxel/voxcloud_create.rb +40 -0
  79. data/lib/fog/compute/parsers/voxel/voxcloud_delete.rb +31 -0
  80. data/lib/fog/compute/parsers/voxel/voxcloud_status.rb +42 -0
  81. data/lib/fog/compute/rackspace.rb +0 -16
  82. data/lib/fog/compute/requests/aws/associate_address.rb +2 -0
  83. data/lib/fog/compute/requests/aws/authorize_security_group_ingress.rb +28 -8
  84. data/lib/fog/compute/requests/aws/create_security_group.rb +2 -0
  85. data/lib/fog/compute/requests/aws/create_tags.rb +2 -0
  86. data/lib/fog/compute/requests/aws/delete_key_pair.rb +2 -0
  87. data/lib/fog/compute/requests/aws/delete_security_group.rb +2 -0
  88. data/lib/fog/compute/requests/aws/delete_snapshot.rb +2 -0
  89. data/lib/fog/compute/requests/aws/delete_tags.rb +2 -0
  90. data/lib/fog/compute/requests/aws/delete_volume.rb +2 -0
  91. data/lib/fog/compute/requests/aws/disassociate_address.rb +2 -0
  92. data/lib/fog/compute/requests/aws/modify_image_attributes.rb +2 -0
  93. data/lib/fog/compute/requests/aws/modify_snapshot_attribute.rb +2 -0
  94. data/lib/fog/compute/requests/aws/reboot_instances.rb +2 -0
  95. data/lib/fog/compute/requests/aws/release_address.rb +2 -0
  96. data/lib/fog/compute/requests/aws/revoke_security_group_ingress.rb +2 -0
  97. data/lib/fog/compute/requests/ecloud/add_backup_internet_service.rb +109 -0
  98. data/lib/fog/compute/requests/ecloud/add_internet_service.rb +149 -0
  99. data/lib/fog/compute/requests/ecloud/add_node.rb +62 -0
  100. data/lib/fog/compute/requests/ecloud/clone_vapp.rb +40 -0
  101. data/lib/fog/compute/requests/ecloud/configure_internet_service.rb +112 -0
  102. data/lib/fog/compute/requests/ecloud/configure_network.rb +44 -0
  103. data/lib/fog/compute/requests/ecloud/configure_network_ip.rb +66 -0
  104. data/lib/fog/compute/requests/ecloud/configure_node.rb +56 -0
  105. data/lib/fog/compute/requests/ecloud/configure_vapp.rb +144 -0
  106. data/lib/fog/compute/requests/ecloud/delete_internet_service.rb +22 -0
  107. data/lib/fog/compute/requests/ecloud/delete_node.rb +22 -0
  108. data/lib/fog/compute/requests/ecloud/delete_vapp.rb +29 -0
  109. data/lib/fog/compute/requests/ecloud/get_catalog.rb +44 -0
  110. data/lib/fog/compute/requests/ecloud/get_catalog_item.rb +47 -0
  111. data/lib/fog/compute/requests/ecloud/get_customization_options.rb +22 -0
  112. data/lib/fog/compute/requests/ecloud/get_firewall_acl.rb +11 -0
  113. data/lib/fog/compute/requests/ecloud/get_firewall_acls.rb +11 -0
  114. data/lib/fog/compute/requests/ecloud/get_internet_services.rb +82 -0
  115. data/lib/fog/compute/requests/ecloud/get_network.rb +44 -0
  116. data/lib/fog/compute/requests/ecloud/get_network_extensions.rb +33 -0
  117. data/lib/fog/compute/requests/ecloud/get_network_ip.rb +43 -0
  118. data/lib/fog/compute/requests/ecloud/get_network_ips.rb +35 -0
  119. data/lib/fog/compute/requests/ecloud/get_node.rb +40 -0
  120. data/lib/fog/compute/requests/ecloud/get_nodes.rb +41 -0
  121. data/lib/fog/compute/requests/ecloud/get_organization.rb +49 -0
  122. data/lib/fog/compute/requests/ecloud/get_public_ip.rb +34 -0
  123. data/lib/fog/compute/requests/ecloud/get_public_ips.rb +38 -0
  124. data/lib/fog/compute/requests/ecloud/get_task.rb +11 -0
  125. data/lib/fog/compute/requests/ecloud/get_task_list.rb +11 -0
  126. data/lib/fog/compute/requests/ecloud/get_vapp.rb +99 -0
  127. data/lib/fog/compute/requests/ecloud/get_vapp_template.rb +11 -0
  128. data/lib/fog/compute/requests/ecloud/get_vdc.rb +84 -0
  129. data/lib/fog/compute/requests/ecloud/get_versions.rb +37 -0
  130. data/lib/fog/compute/requests/ecloud/instantiate_vapp_template.rb +142 -0
  131. data/lib/fog/compute/requests/ecloud/login.rb +48 -0
  132. data/lib/fog/compute/requests/ecloud/power_off.rb +23 -0
  133. data/lib/fog/compute/requests/ecloud/power_on.rb +23 -0
  134. data/lib/fog/compute/requests/ecloud/power_reset.rb +11 -0
  135. data/lib/fog/compute/requests/ecloud/power_shutdown.rb +11 -0
  136. data/lib/fog/compute/requests/voxel/devices_list.rb +24 -0
  137. data/lib/fog/compute/requests/voxel/devices_power.rb +22 -0
  138. data/lib/fog/compute/requests/voxel/images_list.rb +31 -0
  139. data/lib/fog/compute/requests/voxel/voxcloud_create.rb +22 -0
  140. data/lib/fog/compute/requests/voxel/voxcloud_delete.rb +20 -0
  141. data/lib/fog/compute/requests/voxel/voxcloud_status.rb +29 -0
  142. data/lib/fog/compute/slicehost.rb +2 -0
  143. data/lib/fog/compute/voxel.rb +112 -0
  144. data/lib/fog/core.rb +1 -0
  145. data/lib/fog/core/credentials.rb +6 -2
  146. data/lib/fog/core/parser.rb +2 -0
  147. data/lib/fog/core/scp.rb +67 -0
  148. data/lib/fog/dns.rb +6 -0
  149. data/lib/fog/dns/aws.rb +2 -0
  150. data/lib/fog/dns/bluebox.rb +110 -0
  151. data/lib/fog/dns/dnsimple.rb +95 -0
  152. data/lib/fog/dns/models/bluebox/record.rb +52 -0
  153. data/lib/fog/dns/models/bluebox/records.rb +36 -0
  154. data/lib/fog/dns/models/bluebox/zone.rb +63 -0
  155. data/lib/fog/dns/models/bluebox/zones.rb +28 -0
  156. data/lib/fog/dns/models/dnsimple/record.rb +54 -0
  157. data/lib/fog/dns/models/dnsimple/records.rb +38 -0
  158. data/lib/fog/dns/models/dnsimple/zone.rb +50 -0
  159. data/lib/fog/dns/models/dnsimple/zones.rb +28 -0
  160. data/lib/fog/dns/parsers/bluebox/create_record.rb +26 -0
  161. data/lib/fog/dns/parsers/bluebox/create_zone.rb +26 -0
  162. data/lib/fog/dns/parsers/bluebox/get_record.rb +21 -0
  163. data/lib/fog/dns/parsers/bluebox/get_records.rb +27 -0
  164. data/lib/fog/{compute/parsers/terremark_ecloud/get_ip_address.rb → dns/parsers/bluebox/get_zone.rb} +6 -6
  165. data/lib/fog/dns/parsers/bluebox/get_zones.rb +30 -0
  166. data/lib/fog/dns/requests/bluebox/create_record.rb +48 -0
  167. data/lib/fog/dns/requests/bluebox/create_zone.rb +52 -0
  168. data/lib/fog/dns/requests/bluebox/delete_record.rb +31 -0
  169. data/lib/fog/dns/requests/bluebox/delete_zone.rb +31 -0
  170. data/lib/fog/dns/requests/bluebox/get_record.rb +40 -0
  171. data/lib/fog/dns/requests/bluebox/get_records.rb +41 -0
  172. data/lib/fog/dns/requests/bluebox/get_zone.rb +44 -0
  173. data/lib/fog/dns/requests/bluebox/get_zones.rb +43 -0
  174. data/lib/fog/dns/requests/bluebox/update_record.rb +34 -0
  175. data/lib/fog/dns/requests/bluebox/update_zone.rb +30 -0
  176. data/lib/fog/dns/requests/dnsimple/create_domain.rb +27 -0
  177. data/lib/fog/dns/requests/dnsimple/create_record.rb +48 -0
  178. data/lib/fog/dns/requests/dnsimple/delete_domain.rb +26 -0
  179. data/lib/fog/dns/requests/dnsimple/delete_record.rb +21 -0
  180. data/lib/fog/dns/requests/dnsimple/get_domain.rb +37 -0
  181. data/lib/fog/dns/requests/dnsimple/list_domains.rb +35 -0
  182. data/lib/fog/dns/requests/dnsimple/list_records.rb +32 -0
  183. data/lib/fog/dns/requests/dnsimple/update_record.rb +42 -0
  184. data/lib/fog/dns/slicehost.rb +2 -0
  185. data/lib/fog/dns/zerigo.rb +2 -0
  186. data/lib/fog/providers.rb +3 -1
  187. data/lib/fog/providers/aws.rb +0 -4
  188. data/lib/fog/providers/bluebox.rb +1 -8
  189. data/lib/fog/providers/dnsimple.rb +11 -0
  190. data/lib/fog/providers/ecloud.rb +11 -0
  191. data/lib/fog/providers/go_grid.rb +0 -8
  192. data/lib/fog/providers/google.rb +0 -3
  193. data/lib/fog/providers/linode.rb +0 -8
  194. data/lib/fog/providers/local.rb +0 -8
  195. data/lib/fog/providers/new_servers.rb +0 -11
  196. data/lib/fog/providers/rackspace.rb +0 -2
  197. data/lib/fog/providers/slicehost.rb +0 -11
  198. data/lib/fog/providers/voxel.rb +16 -0
  199. data/lib/fog/providers/zerigo.rb +0 -3
  200. data/lib/fog/storage/aws.rb +7 -19
  201. data/lib/fog/storage/google.rb +2 -2
  202. data/lib/fog/storage/models/aws/directory.rb +0 -3
  203. data/lib/fog/storage/models/aws/file.rb +0 -3
  204. data/lib/fog/storage/models/google/directory.rb +0 -3
  205. data/lib/fog/storage/models/google/file.rb +0 -3
  206. data/lib/fog/storage/models/local/directory.rb +0 -3
  207. data/lib/fog/storage/models/local/file.rb +29 -1
  208. data/lib/fog/storage/models/local/files.rb +8 -5
  209. data/lib/fog/storage/models/rackspace/directory.rb +1 -3
  210. data/lib/fog/storage/parsers/aws/get_bucket_website.rb +26 -0
  211. data/lib/fog/storage/rackspace.rb +0 -16
  212. data/lib/fog/storage/requests/aws/delete_bucket_website.rb +32 -0
  213. data/lib/fog/storage/requests/aws/get_bucket_website.rb +42 -0
  214. data/lib/fog/storage/requests/aws/put_bucket_website.rb +49 -0
  215. data/lib/fog/terremark.rb +0 -5
  216. data/spec/ecloud/bin_spec.rb +22 -0
  217. data/spec/{vcloud/terremark/ecloud → ecloud}/models/backup_internet_service_spec.rb +5 -5
  218. data/spec/{vcloud/terremark/ecloud → ecloud}/models/backup_internet_services_spec.rb +4 -4
  219. data/spec/{vcloud/terremark/ecloud → ecloud}/models/internet_service_spec.rb +5 -5
  220. data/spec/{vcloud/terremark/ecloud → ecloud}/models/internet_services_spec.rb +4 -4
  221. data/spec/{vcloud/terremark/ecloud → ecloud}/models/ip_spec.rb +5 -5
  222. data/spec/{vcloud/terremark/ecloud → ecloud}/models/ips_spec.rb +4 -4
  223. data/spec/{vcloud/terremark/ecloud → ecloud}/models/network_spec.rb +5 -5
  224. data/spec/{vcloud/terremark/ecloud → ecloud}/models/networks_spec.rb +4 -4
  225. data/spec/{vcloud/terremark/ecloud → ecloud}/models/node_spec.rb +5 -5
  226. data/spec/{vcloud/terremark/ecloud → ecloud}/models/nodes_spec.rb +4 -4
  227. data/spec/{vcloud/terremark/ecloud → ecloud}/models/public_ip_spec.rb +5 -5
  228. data/spec/{vcloud/terremark/ecloud → ecloud}/models/public_ips_spec.rb +4 -4
  229. data/spec/{vcloud/terremark/ecloud → ecloud}/models/server_spec.rb +4 -4
  230. data/spec/{vcloud/terremark/ecloud → ecloud}/models/vdc_spec.rb +5 -5
  231. data/spec/{vcloud/terremark/ecloud → ecloud}/models/vdcs_spec.rb +4 -4
  232. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/add_backup_internet_service_spec.rb +2 -2
  233. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/add_internet_service_spec.rb +2 -2
  234. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/add_node_spec.rb +2 -2
  235. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/configure_internet_service_spec.rb +2 -2
  236. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/configure_network_ip_spec.rb +2 -2
  237. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/configure_node_spec.rb +2 -2
  238. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/configure_vapp_spec.rb +2 -2
  239. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/delete_internet_service_spec.rb +2 -2
  240. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/delete_node_spec.rb +2 -2
  241. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/delete_vapp_spec.rb +2 -2
  242. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/get_catalog_item_spec.rb +2 -2
  243. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/get_catalog_spec.rb +2 -2
  244. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/get_customization_options_spec.rb +2 -2
  245. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/get_internet_services_spec.rb +2 -2
  246. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/get_network_ip_spec.rb +2 -2
  247. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/get_network_ips_spec.rb +2 -2
  248. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/get_network_spec.rb +2 -2
  249. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/get_node_spec.rb +2 -2
  250. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/get_nodes_spec.rb +2 -2
  251. data/spec/{vcloud → ecloud}/requests/get_organization_spec.rb +2 -2
  252. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/get_public_ip_spec.rb +2 -2
  253. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/get_public_ips_spec.rb +2 -2
  254. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/get_vapp_spec.rb +2 -2
  255. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/get_vdc_spec.rb +2 -2
  256. data/spec/ecloud/requests/get_versions_spec.rb +57 -0
  257. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/instantiate_vapp_template_spec.rb +3 -3
  258. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/login_spec.rb +2 -2
  259. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/power_off_spec.rb +2 -2
  260. data/spec/{vcloud/terremark/ecloud → ecloud}/requests/power_on_spec.rb +2 -2
  261. data/spec/{vcloud → ecloud}/spec_helper.rb +14 -29
  262. data/spec/{vcloud → ecloud}/vcloud_spec.rb +4 -4
  263. data/spec/spec_helper.rb +0 -1
  264. data/tests/compute/helper.rb +12 -1
  265. data/tests/compute/models/flavors_tests.rb +2 -0
  266. data/tests/compute/models/server_tests.rb +28 -1
  267. data/tests/compute/requests/voxel/image_tests.rb +46 -0
  268. data/tests/compute/requests/voxel/server_tests.rb +123 -0
  269. data/tests/dns/helper.rb +10 -1
  270. data/tests/dns/models/record_tests.rb +0 -1
  271. data/tests/dns/requests/bluebox/dns_tests.rb +271 -0
  272. data/tests/dns/requests/dnsimple/dns_tests.rb +130 -0
  273. data/tests/helper.rb +1 -1
  274. data/tests/helpers/mock_helper.rb +2 -0
  275. data/tests/storage/models/directory_test.rb +2 -1
  276. metadata +244 -224
  277. data/lib/fog/bin/terremark_ecloud.rb +0 -28
  278. data/lib/fog/bin/vcloud.rb +0 -59
  279. data/lib/fog/compute/parsers/terremark_ecloud/get_catalog.rb +0 -36
  280. data/lib/fog/compute/parsers/terremark_ecloud/get_catalog_item.rb +0 -43
  281. data/lib/fog/compute/parsers/terremark_ecloud/get_ip_addresses.rb +0 -27
  282. data/lib/fog/compute/parsers/terremark_ecloud/get_network.rb +0 -59
  283. data/lib/fog/compute/parsers/terremark_ecloud/get_organization.rb +0 -35
  284. data/lib/fog/compute/parsers/terremark_ecloud/get_task.rb +0 -42
  285. data/lib/fog/compute/parsers/terremark_ecloud/get_task_list.rb +0 -51
  286. data/lib/fog/compute/parsers/terremark_ecloud/get_vdc.rb +0 -110
  287. data/lib/fog/compute/parsers/terremark_ecloud/get_versions.rb +0 -28
  288. data/lib/fog/compute/parsers/terremark_ecloud/login.rb +0 -27
  289. data/lib/fog/compute/requests/terremark_ecloud/get_catalog.rb +0 -19
  290. data/lib/fog/compute/requests/terremark_ecloud/get_catalog_item.rb +0 -19
  291. data/lib/fog/compute/requests/terremark_ecloud/get_ip_address.rb +0 -19
  292. data/lib/fog/compute/requests/terremark_ecloud/get_ip_addresses.rb +0 -19
  293. data/lib/fog/compute/requests/terremark_ecloud/get_network.rb +0 -19
  294. data/lib/fog/compute/requests/terremark_ecloud/get_organization.rb +0 -19
  295. data/lib/fog/compute/requests/terremark_ecloud/get_task.rb +0 -19
  296. data/lib/fog/compute/requests/terremark_ecloud/get_task_list.rb +0 -19
  297. data/lib/fog/compute/requests/terremark_ecloud/get_vdc.rb +0 -19
  298. data/lib/fog/compute/requests/terremark_ecloud/get_versions.rb +0 -26
  299. data/lib/fog/compute/requests/terremark_ecloud/login.rb +0 -29
  300. data/lib/fog/compute/terremark_ecloud.rb +0 -93
  301. data/lib/fog/providers/terremark_ecloud.rb +0 -17
  302. data/lib/fog/terremark/ecloud.rb +0 -73
  303. data/lib/fog/vcloud.rb +0 -337
  304. data/lib/fog/vcloud/collection.rb +0 -30
  305. data/lib/fog/vcloud/generators.rb +0 -33
  306. data/lib/fog/vcloud/mock_data_classes.rb +0 -767
  307. data/lib/fog/vcloud/model.rb +0 -22
  308. data/lib/fog/vcloud/models/vdc.rb +0 -26
  309. data/lib/fog/vcloud/models/vdcs.rb +0 -35
  310. data/lib/fog/vcloud/requests/get_network.rb +0 -47
  311. data/lib/fog/vcloud/requests/get_organization.rb +0 -47
  312. data/lib/fog/vcloud/requests/get_vdc.rb +0 -82
  313. data/lib/fog/vcloud/requests/get_versions.rb +0 -34
  314. data/lib/fog/vcloud/requests/login.rb +0 -46
  315. data/lib/fog/vcloud/terremark/ecloud.rb +0 -187
  316. data/lib/fog/vcloud/terremark/ecloud/models/backup_internet_service.rb +0 -60
  317. data/lib/fog/vcloud/terremark/ecloud/models/backup_internet_services.rb +0 -36
  318. data/lib/fog/vcloud/terremark/ecloud/models/catalog.rb +0 -31
  319. data/lib/fog/vcloud/terremark/ecloud/models/catalog_item.rb +0 -31
  320. data/lib/fog/vcloud/terremark/ecloud/models/firewall_acl.rb +0 -28
  321. data/lib/fog/vcloud/terremark/ecloud/models/firewall_acls.rb +0 -34
  322. data/lib/fog/vcloud/terremark/ecloud/models/internet_service.rb +0 -121
  323. data/lib/fog/vcloud/terremark/ecloud/models/internet_services.rb +0 -36
  324. data/lib/fog/vcloud/terremark/ecloud/models/ip.rb +0 -51
  325. data/lib/fog/vcloud/terremark/ecloud/models/ips.rb +0 -35
  326. data/lib/fog/vcloud/terremark/ecloud/models/network.rb +0 -77
  327. data/lib/fog/vcloud/terremark/ecloud/models/networks.rb +0 -36
  328. data/lib/fog/vcloud/terremark/ecloud/models/node.rb +0 -47
  329. data/lib/fog/vcloud/terremark/ecloud/models/nodes.rb +0 -33
  330. data/lib/fog/vcloud/terremark/ecloud/models/public_ip.rb +0 -25
  331. data/lib/fog/vcloud/terremark/ecloud/models/public_ips.rb +0 -39
  332. data/lib/fog/vcloud/terremark/ecloud/models/server.rb +0 -211
  333. data/lib/fog/vcloud/terremark/ecloud/models/servers.rb +0 -57
  334. data/lib/fog/vcloud/terremark/ecloud/models/task.rb +0 -23
  335. data/lib/fog/vcloud/terremark/ecloud/models/tasks.rb +0 -33
  336. data/lib/fog/vcloud/terremark/ecloud/models/vdc.rb +0 -83
  337. data/lib/fog/vcloud/terremark/ecloud/models/vdcs.rb +0 -42
  338. data/lib/fog/vcloud/terremark/ecloud/requests/add_backup_internet_service.rb +0 -111
  339. data/lib/fog/vcloud/terremark/ecloud/requests/add_internet_service.rb +0 -152
  340. data/lib/fog/vcloud/terremark/ecloud/requests/add_node.rb +0 -64
  341. data/lib/fog/vcloud/terremark/ecloud/requests/clone_vapp.rb +0 -42
  342. data/lib/fog/vcloud/terremark/ecloud/requests/configure_internet_service.rb +0 -115
  343. data/lib/fog/vcloud/terremark/ecloud/requests/configure_network.rb +0 -46
  344. data/lib/fog/vcloud/terremark/ecloud/requests/configure_network_ip.rb +0 -68
  345. data/lib/fog/vcloud/terremark/ecloud/requests/configure_node.rb +0 -58
  346. data/lib/fog/vcloud/terremark/ecloud/requests/configure_vapp.rb +0 -147
  347. data/lib/fog/vcloud/terremark/ecloud/requests/delete_internet_service.rb +0 -25
  348. data/lib/fog/vcloud/terremark/ecloud/requests/delete_node.rb +0 -24
  349. data/lib/fog/vcloud/terremark/ecloud/requests/delete_vapp.rb +0 -32
  350. data/lib/fog/vcloud/terremark/ecloud/requests/get_catalog.rb +0 -46
  351. data/lib/fog/vcloud/terremark/ecloud/requests/get_catalog_item.rb +0 -49
  352. data/lib/fog/vcloud/terremark/ecloud/requests/get_customization_options.rb +0 -24
  353. data/lib/fog/vcloud/terremark/ecloud/requests/get_firewall_acl.rb +0 -13
  354. data/lib/fog/vcloud/terremark/ecloud/requests/get_firewall_acls.rb +0 -13
  355. data/lib/fog/vcloud/terremark/ecloud/requests/get_internet_services.rb +0 -84
  356. data/lib/fog/vcloud/terremark/ecloud/requests/get_network.rb +0 -47
  357. data/lib/fog/vcloud/terremark/ecloud/requests/get_network_extensions.rb +0 -35
  358. data/lib/fog/vcloud/terremark/ecloud/requests/get_network_ip.rb +0 -45
  359. data/lib/fog/vcloud/terremark/ecloud/requests/get_network_ips.rb +0 -37
  360. data/lib/fog/vcloud/terremark/ecloud/requests/get_node.rb +0 -42
  361. data/lib/fog/vcloud/terremark/ecloud/requests/get_nodes.rb +0 -43
  362. data/lib/fog/vcloud/terremark/ecloud/requests/get_public_ip.rb +0 -36
  363. data/lib/fog/vcloud/terremark/ecloud/requests/get_public_ips.rb +0 -41
  364. data/lib/fog/vcloud/terremark/ecloud/requests/get_task.rb +0 -13
  365. data/lib/fog/vcloud/terremark/ecloud/requests/get_task_list.rb +0 -14
  366. data/lib/fog/vcloud/terremark/ecloud/requests/get_vapp.rb +0 -101
  367. data/lib/fog/vcloud/terremark/ecloud/requests/get_vapp_template.rb +0 -13
  368. data/lib/fog/vcloud/terremark/ecloud/requests/get_vdc.rb +0 -87
  369. data/lib/fog/vcloud/terremark/ecloud/requests/instantiate_vapp_template.rb +0 -144
  370. data/lib/fog/vcloud/terremark/ecloud/requests/power_off.rb +0 -25
  371. data/lib/fog/vcloud/terremark/ecloud/requests/power_on.rb +0 -25
  372. data/lib/fog/vcloud/terremark/ecloud/requests/power_reset.rb +0 -13
  373. data/lib/fog/vcloud/terremark/ecloud/requests/power_shutdown.rb +0 -13
  374. data/lib/fog/vcloud/terremark/vcloud.rb +0 -39
  375. data/lib/fog/vcloud/terremark/vcloud/requests/get_vdc.rb +0 -57
  376. data/spec/vcloud/bin_spec.rb +0 -28
  377. data/spec/vcloud/models/vdc_spec.rb +0 -51
  378. data/spec/vcloud/models/vdcs_spec.rb +0 -1
  379. data/spec/vcloud/requests/get_network_spec.rb +0 -44
  380. data/spec/vcloud/requests/get_vdc_spec.rb +0 -62
  381. data/spec/vcloud/requests/get_versions_spec.rb +0 -54
  382. data/spec/vcloud/requests/login_spec.rb +0 -24
  383. data/tests/compute/requests/terremark_ecloud/catalog_tests.rb +0 -47
  384. data/tests/compute/requests/terremark_ecloud/helper.rb +0 -45
  385. data/tests/compute/requests/terremark_ecloud/network_tests.rb +0 -30
  386. data/tests/compute/requests/terremark_ecloud/organization_tests.rb +0 -28
  387. data/tests/compute/requests/terremark_ecloud/task_tests.rb +0 -39
  388. data/tests/compute/requests/terremark_ecloud/vdc_tests.rb +0 -60
data/lib/fog/vcloud.rb DELETED
@@ -1,337 +0,0 @@
1
- require 'nokogiri'
2
-
3
- require 'fog/core'
4
- require 'fog/core/parser'
5
-
6
- require 'builder'
7
- require 'fog/vcloud/model'
8
- require 'fog/vcloud/collection'
9
- require 'fog/vcloud/generators'
10
- require 'fog/vcloud/mock_data_classes'
11
- # ecloud/vcloud requires at the bottom so that the following will be defined
12
-
13
- module URI
14
- class Generic
15
- def host_url
16
- @host_url ||= "#{self.scheme}://#{self.host}#{self.port ? ":#{self.port}" : ''}"
17
- end
18
- end
19
- end
20
-
21
- module Fog
22
- class Vcloud < Fog::Service
23
-
24
- requires :username, :password, :versions_uri
25
- recognizes :version, :persistent
26
-
27
- model_path 'fog/vcloud/models'
28
- model :vdc
29
- collection :vdcs
30
-
31
- request_path 'fog/vcloud/requests'
32
- request :login
33
- request :get_versions
34
- request :get_vdc
35
- request :get_organization
36
- request :get_network
37
-
38
- class UnsupportedVersion < Exception ; end
39
-
40
- module Shared
41
- attr_reader :versions_uri
42
-
43
- def default_organization_uri
44
- @default_organization_uri ||= begin
45
- unless @login_results
46
- do_login
47
- end
48
- case @login_results.body[:Org]
49
- when Array
50
- @login_results.body[:Org].first[:href]
51
- when Hash
52
- @login_results.body[:Org][:href]
53
- else
54
- nil
55
- end
56
- end
57
- end
58
-
59
- # login handles the auth, but we just need the Set-Cookie
60
- # header from that call.
61
- def do_login
62
- @login_results = login
63
- @cookie = @login_results.headers['Set-Cookie']
64
- end
65
-
66
- def supported_versions
67
- @supported_versions ||= get_versions(@versions_uri).body[:VersionInfo]
68
- end
69
-
70
- def xmlns
71
- { "xmlns" => "http://www.vmware.com/vcloud/v0.8",
72
- "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
73
- "xmlns:xsd" => "http://www.w3.org/2001/XMLSchema" }
74
- end
75
-
76
- # private
77
-
78
- def ensure_unparsed(uri)
79
- if uri.is_a?(String)
80
- uri
81
- else
82
- uri.to_s
83
- end
84
- end
85
-
86
- end
87
-
88
- class Real
89
- include Shared
90
- extend Fog::Vcloud::Generators
91
-
92
- def supporting_versions
93
- ["0.8"]
94
- end
95
-
96
- def initialize(options = {})
97
- @connections = {}
98
- @versions_uri = URI.parse(options[:versions_uri])
99
- @module = options[:module]
100
- @version = options[:version]
101
- @username = options[:username]
102
- @password = options[:password]
103
- @persistent = options[:persistent]
104
- end
105
-
106
- def default_organization_uri
107
- @default_organization_uri ||= begin
108
- unless @login_results
109
- do_login
110
- end
111
- case @login_results.body[:Org]
112
- when Array
113
- @login_results.body[:Org].first[:href]
114
- when Hash
115
- @login_results.body[:Org][:href]
116
- else
117
- nil
118
- end
119
- end
120
- end
121
-
122
- def reload
123
- @connections.each_value { |k,v| v.reset if v }
124
- end
125
-
126
- # If the cookie isn't set, do a get_organizations call to set it
127
- # and try the request.
128
- # If we get an Unauthorized error, we assume the token expired, re-auth and try again
129
- def request(params)
130
- unless @cookie
131
- do_login
132
- end
133
- begin
134
- do_request(params)
135
- rescue Excon::Errors::Unauthorized => e
136
- do_login
137
- do_request(params)
138
- end
139
- end
140
-
141
- private
142
-
143
- def ensure_parsed(uri)
144
- if uri.is_a?(String)
145
- URI.parse(uri)
146
- else
147
- uri
148
- end
149
- end
150
-
151
- def supported_version_numbers
152
- case supported_versions
153
- when Array
154
- supported_versions.map { |version| version[:Version] }
155
- when Hash
156
- [ supported_versions[:Version] ]
157
- end
158
- end
159
-
160
- def get_login_uri
161
- check_versions
162
- URI.parse case supported_versions
163
- when Array
164
- supported_versions.detect {|version| version[:Version] == @version }[:LoginUrl]
165
- when Hash
166
- supported_versions[:LoginUrl]
167
- end
168
- end
169
-
170
- # If we don't support any versions the service does, then raise an error.
171
- # If the @version that super selected isn't in our supported list, then select one that is.
172
- def check_versions
173
- if @version
174
- unless supported_version_numbers.include?(@version.to_s)
175
- raise UnsupportedVersion.new("#{@version} is not supported by the server.")
176
- end
177
- unless supporting_versions.include?(@version.to_s)
178
- raise UnsupportedVersion.new("#{@version} is not supported by #{self.class}")
179
- end
180
- else
181
- unless @version = (supported_version_numbers & supporting_versions).sort.first
182
- raise UnsupportedVersion.new("\nService @ #{@versions_uri} supports: #{supported_version_numbers.join(', ')}\n" +
183
- "#{self.class} supports: #{supporting_versions.join(', ')}")
184
- end
185
- end
186
- end
187
-
188
- # Don't need to set the cookie for these or retry them if the cookie timed out
189
- def unauthenticated_request(params)
190
- do_request(params)
191
- end
192
-
193
- # Use this to set the Authorization header for login
194
- def authorization_header
195
- "Basic #{Base64.encode64("#{@username}:#{@password}").chomp!}"
196
- end
197
-
198
- def login_uri
199
- @login_uri ||= get_login_uri
200
- end
201
-
202
- # login handles the auth, but we just need the Set-Cookie
203
- # header from that call.
204
- def do_login
205
- @login_results = login
206
- @cookie = @login_results.headers['Set-Cookie']
207
- end
208
-
209
- # Actually do the request
210
- def do_request(params)
211
- # Convert the uri to a URI if it's a string.
212
- if params[:uri].is_a?(String)
213
- params[:uri] = URI.parse(params[:uri])
214
- end
215
-
216
- # Hash connections on the host_url ... There's nothing to say we won't get URI's that go to
217
- # different hosts.
218
- @connections[params[:uri].host_url] ||= Fog::Connection.new(params[:uri].host_url, @persistent)
219
-
220
- # Set headers to an empty hash if none are set.
221
- headers = params[:headers] || {}
222
-
223
- # Add our auth cookie to the headers
224
- if @cookie
225
- headers.merge!('Cookie' => @cookie)
226
- end
227
-
228
- # Make the request
229
- response = @connections[params[:uri].host_url].request({
230
- :body => params[:body] || '',
231
- :expects => params[:expects] || 200,
232
- :headers => headers,
233
- :method => params[:method] || 'GET',
234
- :path => params[:uri].path
235
- })
236
-
237
- # Parse the response body into a hash
238
- #puts response.body
239
- unless response.body.empty?
240
- if params[:parse]
241
- document = Fog::ToHashDocument.new
242
- parser = Nokogiri::XML::SAX::PushParser.new(document)
243
- parser << response.body
244
- parser.finish
245
-
246
- response.body = document.body
247
- end
248
- end
249
-
250
- response
251
- end
252
- end
253
-
254
- class Mock
255
- include Shared
256
- include MockDataClasses
257
-
258
- def self.base_url
259
- "https://fakey.com/api/v0.8"
260
- end
261
-
262
- def self.data_reset
263
- @mock_data = nil
264
- end
265
-
266
- def self.data( base_url = self.base_url )
267
- MockDataClasses::Base.base_url = base_url
268
-
269
- @mock_data ||= MockData.new.tap do |mock_data|
270
- mock_data.versions << MockVersion.new(:version => "v0.8", :supported => true)
271
-
272
- mock_data.organizations << MockOrganization.new(:name => "Boom Inc.").tap do |mock_organization|
273
- mock_organization.vdcs << MockVdc.new(:name => "Boomstick").tap do |mock_vdc|
274
- mock_vdc.catalog.items << MockCatalogItem.new(:name => "Item 0").tap do |mock_catalog_item|
275
- mock_catalog_item.disks << MockVirtualMachineDisk.new(:size => 25 * 1024)
276
- end
277
- mock_vdc.catalog.items << MockCatalogItem.new(:name => "Item 1").tap do |mock_catalog_item|
278
- mock_catalog_item.disks << MockVirtualMachineDisk.new(:size => 25 * 1024)
279
- end
280
- mock_vdc.catalog.items << MockCatalogItem.new(:name => "Item 2").tap do |mock_catalog_item|
281
- mock_catalog_item.disks << MockVirtualMachineDisk.new(:size => 25 * 1024)
282
- end
283
-
284
- mock_vdc.networks << MockNetwork.new({ :subnet => "1.2.3.0/24" }, mock_vdc)
285
- mock_vdc.networks << MockNetwork.new({ :subnet => "4.5.6.0/24" }, mock_vdc)
286
-
287
- mock_vdc.virtual_machines << MockVirtualMachine.new({ :name => "Broom 1", :ip => "1.2.3.3" }, mock_vdc)
288
- mock_vdc.virtual_machines << MockVirtualMachine.new({ :name => "Broom 2", :ip => "1.2.3.4" }, mock_vdc)
289
- mock_vdc.virtual_machines << MockVirtualMachine.new({ :name => "Email!", :ip => "1.2.3.10" }, mock_vdc)
290
- end
291
-
292
- mock_organization.vdcs << MockVdc.new(:name => "Rock-n-Roll", :storage_allocated => 150, :storage_used => 40, :cpu_allocated => 1000, :memory_allocated => 2048).tap do |mock_vdc|
293
- mock_vdc.networks << MockNetwork.new({ :subnet => "7.8.9.0/24" }, mock_vdc)
294
-
295
- mock_vdc.virtual_machines << MockVirtualMachine.new({ :name => "Master Blaster", :ip => "7.8.9.10" }, mock_vdc)
296
- end
297
- end
298
- end
299
- end
300
-
301
- def initialize(options = {})
302
- @versions_uri = URI.parse('https://vcloud.fakey.com/api/versions')
303
- end
304
-
305
- def mock_it(status, mock_data, mock_headers = {})
306
- response = Excon::Response.new
307
-
308
- #Parse the response body into a hash
309
- if mock_data.empty?
310
- response.body = mock_data
311
- else
312
- document = Fog::ToHashDocument.new
313
- parser = Nokogiri::XML::SAX::PushParser.new(document)
314
- parser << mock_data
315
- parser.finish
316
- response.body = document.body
317
- end
318
-
319
- response.status = status
320
- response.headers = mock_headers
321
- response
322
- end
323
-
324
- def mock_error(expected, status, body='', headers={})
325
- raise Excon::Errors::Unauthorized.new("Expected(#{expected}) <=> Actual(#{status})")
326
- end
327
-
328
- def mock_data
329
- Fog::Vcloud::Mock.data
330
- end
331
-
332
- end
333
- end
334
- end
335
-
336
- require 'fog/vcloud/terremark/ecloud'
337
- require 'fog/vcloud/terremark/vcloud'
@@ -1,30 +0,0 @@
1
- module Fog
2
- class Vcloud < Fog::Service
3
- class Collection < Fog::Collection
4
-
5
- def load(objects)
6
- objects = [ objects ] if objects.is_a?(Hash)
7
- super
8
- end
9
-
10
- def check_href!(opts = {})
11
- unless href
12
- if opts.is_a?(String)
13
- t = Hash.new
14
- t[:parent] = opts
15
- opts = t
16
- end
17
- msg = ":href missing, call with a :href pointing to #{if opts[:message]
18
- opts[:message]
19
- elsif opts[:parent]
20
- "the #{opts[:parent]} whos #{self.class.to_s.split('::').last.downcase} you want to enumerate"
21
- else
22
- "the resource"
23
- end}"
24
- raise Fog::Errors::Error.new(msg)
25
- end
26
- end
27
-
28
- end
29
- end
30
- end
@@ -1,33 +0,0 @@
1
- module Fog
2
- class Vcloud < Fog::Service
3
- module Generators
4
-
5
- def unauthenticated_basic_request(*args)
6
- self.class_eval <<-EOS, __FILE__,__LINE__
7
- def #{args[0]}(uri)
8
- unauthenticated_request({
9
- :expects => #{args[1] || 200},
10
- :method => '#{args[2] || 'GET'}',
11
- :headers => #{args[3] ? args[3].inspect : '{}'},
12
- :parse => true,
13
- :uri => uri })
14
- end
15
- EOS
16
- end
17
-
18
- def basic_request(*args)
19
- self.class_eval <<-EOS, __FILE__,__LINE__
20
- def #{args[0]}(uri)
21
- request({
22
- :expects => #{args[1] || 200},
23
- :method => '#{args[2] || 'GET'}',
24
- :headers => #{args[3] ? args[3].inspect : '{}'},
25
- :body => '#{args[4] ? args[4] : ''}',
26
- :parse => true,
27
- :uri => uri })
28
- end
29
- EOS
30
- end
31
- end
32
- end
33
- end
@@ -1,767 +0,0 @@
1
- require "ipaddr"
2
-
3
- class IPAddr
4
- def mask
5
- _to_string(@mask_addr)
6
- end
7
- end
8
-
9
- module Fog
10
- class Vcloud
11
- module MockDataClasses
12
- class Base < Hash
13
- def self.base_url=(url)
14
- @base_url = url
15
- end
16
-
17
- self.base_url = "http://vcloud.example.com"
18
-
19
- def self.base_url
20
- @base_url
21
- end
22
-
23
- def first
24
- raise "Don't do this"
25
- end
26
-
27
- def last
28
- raise "Don't do this"
29
- end
30
-
31
- def initialize(data = {}, parent = nil)
32
- @parent = parent
33
-
34
- replace(data)
35
- end
36
-
37
- def _parent
38
- @parent
39
- end
40
-
41
- def base_url
42
- Base.base_url
43
- end
44
-
45
- def href
46
- [base_url, self.class.name.split("::").last, object_id].join("/")
47
- end
48
-
49
- def inspect
50
- "<#{self.class.name} #{object_id} data=#{super}>"
51
- end
52
- end
53
-
54
- class MockData < Base
55
- def versions
56
- @versions ||= []
57
- end
58
-
59
- def organizations
60
- @organizations ||= []
61
- end
62
-
63
- def organization_from_href(href)
64
- find_href_in(href, organizations)
65
- end
66
-
67
- def all_vdcs
68
- organizations.map(&:vdcs).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
-
100
- def all_networks
101
- all_vdcs.map(&:networks).flatten
102
- end
103
-
104
- def network_from_href(href)
105
- find_href_in(href, all_networks)
106
- end
107
-
108
- def all_network_extensions
109
- all_networks.map(&:extensions).flatten
110
- end
111
-
112
- def network_extension_from_href(href)
113
- find_href_in(href, all_network_extensions)
114
- end
115
-
116
- def all_vdc_internet_service_collections
117
- all_vdcs.map(&:internet_service_collection).flatten
118
- end
119
-
120
- def vdc_internet_service_collection_from_href(href)
121
- find_href_in(href, all_vdc_internet_service_collections)
122
- end
123
-
124
- def all_backup_internet_services
125
- all_vdc_internet_service_collections.map(&:backup_internet_services).flatten
126
- end
127
-
128
- def backup_internet_service_from_href(href)
129
- find_href_in(href, all_backup_internet_services)
130
- end
131
-
132
- def all_public_ip_collections
133
- all_vdcs.map {|v| v.public_ip_collection }.flatten
134
- end
135
-
136
- def public_ip_collection_from_href(href)
137
- find_href_in(href, all_public_ip_collections)
138
- end
139
-
140
- def all_public_ips
141
- all_public_ip_collections.map(&:items).flatten
142
- end
143
-
144
- def public_ip_from_href(href)
145
- find_href_in(href, all_public_ips)
146
- end
147
-
148
- def all_public_ip_internet_service_collections
149
- all_public_ips.map(&:internet_service_collection).flatten
150
- end
151
-
152
- def public_ip_internet_service_collection_from_href(href)
153
- find_href_in(href, all_public_ip_internet_service_collections)
154
- end
155
-
156
- def all_public_ip_internet_services
157
- all_public_ip_internet_service_collections.map(&:items).flatten
158
- end
159
-
160
- def public_ip_internet_service_from_href(href)
161
- find_href_in(href, all_public_ip_internet_services)
162
- end
163
-
164
- def all_public_ip_internet_service_node_collections
165
- all_public_ip_internet_services.map(&:node_collection).flatten
166
- end
167
-
168
- def public_ip_internet_service_node_collection_from_href(href)
169
- find_href_in(href, all_public_ip_internet_service_node_collections)
170
- end
171
-
172
- def all_public_ip_internet_service_nodes
173
- all_public_ip_internet_service_node_collections.map(&:items).flatten
174
- end
175
-
176
- def public_ip_internet_service_node_from_href(href)
177
- find_href_in(href, all_public_ip_internet_service_nodes)
178
- end
179
-
180
- def all_network_ip_collections
181
- all_networks.map(&:ip_collection)
182
- end
183
-
184
- def network_ip_collection_from_href(href)
185
- find_href_in(href, all_network_ip_collections)
186
- end
187
-
188
- def all_network_ips
189
- all_network_ip_collections.map {|c| c.items.values }.flatten
190
- end
191
-
192
- def network_ip_from_href(href)
193
- find_href_in(href, all_network_ips)
194
- end
195
-
196
- private
197
-
198
- def find_href_in(href, objects)
199
- objects.detect {|o| o.href == href }
200
- end
201
-
202
- def find_href_prefixed_in(href, objects)
203
- objects.detect {|o| href =~ %r{^#{o.href}($|/)} }
204
- end
205
- end
206
-
207
- class MockVersion < Base
208
- def version
209
- self[:version]
210
- end
211
-
212
- def supported
213
- !!self[:supported]
214
- end
215
-
216
- def login_url
217
- href
218
- end
219
- end
220
-
221
- class MockOrganization < Base
222
- def name
223
- self[:name]
224
- end
225
-
226
- def vdcs
227
- @vdcs ||= []
228
- end
229
- end
230
-
231
- class MockVdc < Base
232
- def name
233
- self[:name]
234
- end
235
-
236
- def storage_allocated
237
- self[:storage_allocated] || 200
238
- end
239
-
240
- def storage_used
241
- self[:storage_used] || 105
242
- end
243
-
244
- def cpu_allocated
245
- self[:cpu_allocated] || 10000
246
- end
247
-
248
- def memory_allocated
249
- self[:memory_allocated] || 20480
250
- end
251
-
252
- def catalog
253
- @catalog ||= MockCatalog.new({}, self)
254
- end
255
-
256
- def networks
257
- @networks ||= []
258
- end
259
-
260
- def virtual_machines
261
- @virtual_machines ||= []
262
- end
263
-
264
- def task_list
265
- @task_list ||= MockTaskList.new({}, self)
266
- end
267
-
268
- # for TM eCloud, should probably be subclassed
269
- def public_ip_collection
270
- @public_ip_collection ||= MockPublicIps.new({}, self)
271
- end
272
-
273
- def internet_service_collection
274
- @internet_service_collection ||= MockVdcInternetServices.new({}, self)
275
- end
276
-
277
- def firewall_acls
278
- @firewall_acls ||= MockFirewallAcls.new({}, self)
279
- end
280
- end
281
-
282
- class MockTaskList < Base
283
- def name
284
- self[:name] || "Tasks List"
285
- end
286
- end
287
-
288
- class MockCatalog < Base
289
- def name
290
- self[:name] || "Catalog"
291
- end
292
-
293
- def items
294
- @items ||= []
295
- end
296
- end
297
-
298
- class MockCatalogItem < Base
299
- def name
300
- self[:name]
301
- end
302
-
303
- def disks
304
- @disks ||= MockVirtualMachineDisks.new(self)
305
- end
306
-
307
- def customization
308
- @customization ||= MockCatalogItemCustomization.new({}, self)
309
- end
310
-
311
- def vapp_template
312
- @vapp_template ||= MockCatalogItemVappTemplate.new({ :name => name }, self)
313
- end
314
- end
315
-
316
- class MockCatalogItemCustomization < Base
317
- def name
318
- self[:name] || "Customization Options"
319
- end
320
- end
321
-
322
- class MockCatalogItemVappTemplate < Base
323
- def name
324
- self[:name]
325
- end
326
- end
327
-
328
- class MockNetwork < Base
329
- def name
330
- self[:name] || subnet
331
- end
332
-
333
- def subnet
334
- self[:subnet]
335
- end
336
-
337
- def gateway
338
- self[:gateway] || subnet_ips[1]
339
- end
340
-
341
- def netmask
342
- self[:netmask] || subnet_ipaddr.mask
343
- end
344
-
345
- def dns
346
- "8.8.8.8"
347
- end
348
-
349
- def features
350
- [
351
- { :type => :FenceMode, :value => "isolated" }
352
- ]
353
- end
354
-
355
- def ip_collection
356
- @ip_collection ||= MockNetworkIps.new({}, self)
357
- end
358
-
359
- def extensions
360
- @extensions ||= MockNetworkExtensions.new({}, self)
361
- end
362
-
363
- def random_ip
364
- usable_subnet_ips[rand(usable_subnet_ips.length)]
365
- end
366
-
367
- # for TM eCloud. should probably be a subclass
368
- def rnat
369
- self[:rnat]
370
- end
371
-
372
- def usable_subnet_ips
373
- subnet_ips[3..-2]
374
- end
375
-
376
- def address
377
- subnet_ips.first
378
- end
379
-
380
- def broadcast
381
- subnet_ips.last
382
- end
383
-
384
- private
385
-
386
- def subnet_ipaddr
387
- @ipaddr ||= IPAddr.new(subnet)
388
- end
389
-
390
- def subnet_ips
391
- subnet_ipaddr.to_range.to_a.map(&:to_s)
392
- end
393
- end
394
-
395
- class MockNetworkIps < Base
396
- def items
397
- @items ||= _parent.usable_subnet_ips.inject({}) do |out, subnet_ip|
398
- out.update(subnet_ip => MockNetworkIp.new({ :ip => subnet_ip }, self))
399
- end
400
- end
401
-
402
- def ordered_ips
403
- items.values.sort_by {|i| i.ip.split(".").map(&:to_i) }
404
- end
405
-
406
- def name
407
- "IP Addresses"
408
- end
409
- end
410
-
411
- class MockNetworkIp < Base
412
- def name
413
- self[:name] || ip
414
- end
415
-
416
- def ip
417
- self[:ip]
418
- end
419
-
420
- def used_by
421
- self[:used_by] || _parent._parent._parent.virtual_machines.detect {|v| v.ip == ip }
422
- end
423
-
424
- def status
425
- if used_by
426
- "Assigned"
427
- else
428
- "Available"
429
- end
430
- end
431
-
432
- def rnat
433
- self[:rnat] || _parent._parent.rnat
434
- end
435
-
436
- def rnat_set?
437
- !!self[:rnat]
438
- end
439
- end
440
-
441
- class MockNetworkExtensions < Base
442
- def name
443
- _parent.name
444
- end
445
-
446
- def gateway
447
- _parent.gateway
448
- end
449
-
450
- def broadcast
451
- _parent.broadcast
452
- end
453
-
454
- def address
455
- _parent.address
456
- end
457
-
458
- def rnat
459
- _parent.rnat
460
- end
461
-
462
- def type
463
- self[:type] || "DMZ"
464
- end
465
-
466
- def vlan
467
- object_id.to_s
468
- end
469
-
470
- def friendly_name
471
- "#{name} (#{type}_#{object_id})"
472
- end
473
- end
474
-
475
- class MockVirtualMachine < Base
476
- def name
477
- self[:name]
478
- end
479
-
480
- def ip
481
- self[:ip]
482
- end
483
-
484
- def cpus
485
- self[:cpus] || 1
486
- end
487
-
488
- def memory
489
- self[:memory] || 1024
490
- end
491
-
492
- def disks
493
- @disks ||= MockVirtualMachineDisks.new(self)
494
- end
495
-
496
- def status
497
- self[:status] || 2
498
- end
499
-
500
- def power_off!
501
- self[:status] = 2
502
- end
503
-
504
- def power_on!
505
- self[:status] = 4
506
- end
507
-
508
- def size
509
- disks.inject(0) {|s, d| s + d.vcloud_size }
510
- end
511
-
512
- def network_ip
513
- if network = _parent.networks.detect {|n| n.ip_collection.items[ip] }
514
- network.ip_collection.items[ip]
515
- end
516
- end
517
-
518
- # from fog ecloud server's _compose_vapp_data
519
- def to_configure_vapp_hash
520
- {
521
- :name => name,
522
- :cpus => cpus,
523
- :memory => memory,
524
- :disks => disks.map {|d| { :number => d.address.to_s, :size => d.vcloud_size, :resource => d.vcloud_size.to_s } }
525
- }
526
- end
527
-
528
- def href(purpose = :base)
529
- case purpose
530
- when :base
531
- super()
532
- when :power_on
533
- super() + "/power/action/powerOn"
534
- when :power_off
535
- super() + "/power/action/powerOff"
536
- end
537
- end
538
- end
539
-
540
- class MockVirtualMachineDisks < Array
541
- def initialize(parent = nil)
542
- @parent = parent
543
- end
544
-
545
- def _parent
546
- @parent
547
- end
548
-
549
- def <<(disk)
550
- next_address = 0
551
- disk_with_max_address = max {|a, b| a[:address] <=> b[:address] }
552
- disk_with_max_address && next_address = disk_with_max_address.address + 1
553
- disk[:address] ||= next_address
554
-
555
- super(disk)
556
-
557
- if (addresses = map {|d| d.address }).uniq.size != size
558
- raise "Duplicate disk address in: #{addresses.inspect} (#{size})"
559
- end
560
-
561
- sort! {|a, b| a.address <=> b.address }
562
- self
563
- end
564
-
565
- def at_address(address)
566
- detect {|d| d.address == address }
567
- end
568
- end
569
-
570
- class MockVirtualMachineDisk < Base
571
- def size
572
- self[:size].to_i
573
- end
574
-
575
- def vcloud_size
576
- # kilobytes
577
- size * 1024
578
- end
579
-
580
- def address
581
- self[:address].to_i
582
- end
583
- end
584
-
585
- # for Terremark eCloud
586
-
587
- class MockVdcInternetServices < Base
588
- def href
589
- _parent.href + "/internetServices"
590
- end
591
-
592
- def name
593
- "Internet Services"
594
- end
595
-
596
- def items
597
- public_ip_internet_services + backup_internet_services
598
- end
599
-
600
- def public_ip_internet_services
601
- _parent.public_ip_collection.items.inject([]) do |services, public_ip|
602
- services + public_ip.internet_service_collection.items
603
- end
604
- end
605
-
606
- def backup_internet_services
607
- @backup_internet_services ||= []
608
- end
609
- end
610
-
611
- class MockBackupInternetService < Base
612
- def name
613
- self[:name] || "Backup Internet Service #{object_id}"
614
- end
615
-
616
- def protocol
617
- self[:protocol]
618
- end
619
-
620
- def port
621
- 0
622
- end
623
-
624
- def enabled
625
- self[:enabled].to_s.downcase != "false"
626
- end
627
-
628
- def timeout
629
- self[:timeout] || 2
630
- end
631
-
632
- def description
633
- self[:description] || "Description for Backup Service #{name}"
634
- end
635
-
636
- def redirect_url
637
- nil
638
- end
639
-
640
- def node_collection
641
- @node_collection ||= MockPublicIpInternetServiceNodes.new({}, self)
642
- end
643
- end
644
-
645
- class MockFirewallAcls < Base
646
- def name
647
- "Firewall Access List"
648
- end
649
- end
650
-
651
- class MockPublicIps < Base
652
- def name
653
- self[:name] || "Public IPs"
654
- end
655
-
656
- def items
657
- @items ||= []
658
- end
659
- end
660
-
661
- class MockPublicIp < Base
662
- def name
663
- self[:name]
664
- end
665
-
666
- def internet_service_collection
667
- @internet_service_collection ||= MockPublicIpInternetServices.new({}, self)
668
- end
669
- end
670
-
671
- class MockPublicIpInternetServices < Base
672
- def href
673
- _parent.href + "/internetServices"
674
- end
675
-
676
- def items
677
- @items ||= []
678
- end
679
- end
680
-
681
- class MockPublicIpInternetService < Base
682
- def name
683
- self[:name] || "Public IP Service #{object_id}"
684
- end
685
-
686
- def description
687
- self[:description] || "Description for Public IP Service #{name}"
688
- end
689
-
690
- def protocol
691
- self[:protocol]
692
- end
693
-
694
- def port
695
- self[:port]
696
- end
697
-
698
- def enabled
699
- !!self[:enabled]
700
- end
701
-
702
- def redirect_url
703
- self[:redirect_url]
704
- end
705
-
706
- def timeout
707
- self[:timeout] || 2
708
- end
709
-
710
- def node_collection
711
- @node_collection ||= MockPublicIpInternetServiceNodes.new({}, self)
712
- end
713
-
714
- def monitor
715
- nil
716
- end
717
-
718
- def backup_service
719
- self[:backup_service]
720
- end
721
- end
722
-
723
- class MockPublicIpInternetServiceNodes < Base
724
- def href
725
- _parent.href + "/nodeServices"
726
- end
727
-
728
- def items
729
- @items ||= [].tap do |node_array|
730
- node_array.instance_variable_set("@default_port", _parent.port)
731
-
732
- def node_array.<<(node)
733
- node[:port] ||= @default_port
734
- super
735
- end
736
- end
737
- end
738
- end
739
-
740
- class MockPublicIpInternetServiceNode < Base
741
- def ip_address
742
- self[:ip_address]
743
- end
744
-
745
- def name
746
- self[:name] || "Public IP Service Node #{object_id}"
747
- end
748
-
749
- def description
750
- self[:description] || "Description for Public IP Service Node #{name}"
751
- end
752
-
753
- def port
754
- self[:port]
755
- end
756
-
757
- def enabled
758
- self[:enabled].to_s.downcase != "false"
759
- end
760
-
761
- def enabled=(new_value)
762
- self[:enabled] = new_value
763
- end
764
- end
765
- end
766
- end
767
- end