fog 1.34.0 → 1.35.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 (350) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +10 -24
  3. data/CHANGELOG.md +84 -0
  4. data/CONTRIBUTING.md +1 -1
  5. data/README.md +4 -20
  6. data/fog.gemspec +7 -5
  7. data/lib/fog.rb +1 -0
  8. data/lib/fog/bin.rb +1 -0
  9. data/lib/fog/digitalocean/compute_v2.rb +108 -0
  10. data/lib/fog/digitalocean/models/compute_v2/flavor.rb +17 -0
  11. data/lib/fog/digitalocean/models/compute_v2/flavors.rb +21 -0
  12. data/lib/fog/digitalocean/models/compute_v2/image.rb +25 -0
  13. data/lib/fog/digitalocean/models/compute_v2/images.rb +36 -0
  14. data/lib/fog/digitalocean/models/compute_v2/region.rb +13 -0
  15. data/lib/fog/digitalocean/models/compute_v2/regions.rb +21 -0
  16. data/lib/fog/digitalocean/models/compute_v2/server.rb +166 -0
  17. data/lib/fog/digitalocean/models/compute_v2/servers.rb +39 -0
  18. data/lib/fog/digitalocean/models/compute_v2/ssh_key.rb +30 -0
  19. data/lib/fog/digitalocean/models/compute_v2/ssh_keys.rb +35 -0
  20. data/lib/fog/digitalocean/requests/compute_v2/change_kernel.rb +44 -0
  21. data/lib/fog/digitalocean/requests/compute_v2/convert_to_snapshot.rb +44 -0
  22. data/lib/fog/digitalocean/requests/compute_v2/create_server.rb +93 -0
  23. data/lib/fog/digitalocean/requests/compute_v2/create_ssh_key.rb +47 -0
  24. data/lib/fog/digitalocean/requests/compute_v2/delete_server.rb +28 -0
  25. data/lib/fog/digitalocean/requests/compute_v2/delete_ssh_key.rb +28 -0
  26. data/lib/fog/digitalocean/requests/compute_v2/disable_backups.rb +45 -0
  27. data/lib/fog/digitalocean/requests/compute_v2/enable_ipv6.rb +44 -0
  28. data/lib/fog/digitalocean/requests/compute_v2/enable_private_networking.rb +44 -0
  29. data/lib/fog/digitalocean/requests/compute_v2/get_droplet_action.rb +36 -0
  30. data/lib/fog/digitalocean/requests/compute_v2/get_image_details.rb +43 -0
  31. data/lib/fog/digitalocean/requests/compute_v2/get_server_details.rb +84 -0
  32. data/lib/fog/digitalocean/requests/compute_v2/get_ssh_key.rb +34 -0
  33. data/lib/fog/digitalocean/requests/compute_v2/list_droplet_actions.rb +38 -0
  34. data/lib/fog/digitalocean/requests/compute_v2/list_flavors.rb +131 -0
  35. data/lib/fog/digitalocean/requests/compute_v2/list_images.rb +50 -0
  36. data/lib/fog/digitalocean/requests/compute_v2/list_regions.rb +94 -0
  37. data/lib/fog/digitalocean/requests/compute_v2/list_servers.rb +28 -0
  38. data/lib/fog/digitalocean/requests/compute_v2/list_ssh_keys.rb +26 -0
  39. data/lib/fog/digitalocean/requests/compute_v2/password_reset.rb +44 -0
  40. data/lib/fog/digitalocean/requests/compute_v2/power_cycle.rb +44 -0
  41. data/lib/fog/digitalocean/requests/compute_v2/power_off.rb +44 -0
  42. data/lib/fog/digitalocean/requests/compute_v2/power_on.rb +44 -0
  43. data/lib/fog/digitalocean/requests/compute_v2/reboot_server.rb +44 -0
  44. data/lib/fog/digitalocean/requests/compute_v2/rebuild.rb +44 -0
  45. data/lib/fog/digitalocean/requests/compute_v2/rename.rb +44 -0
  46. data/lib/fog/digitalocean/requests/compute_v2/resize.rb +48 -0
  47. data/lib/fog/digitalocean/requests/compute_v2/restore.rb +44 -0
  48. data/lib/fog/digitalocean/requests/compute_v2/shutdown.rb +44 -0
  49. data/lib/fog/digitalocean/requests/compute_v2/snapshot.rb +44 -0
  50. data/lib/fog/digitalocean/requests/compute_v2/transfer_image.rb +44 -0
  51. data/lib/fog/digitalocean/requests/compute_v2/update_ssh_key.rb +46 -0
  52. data/lib/fog/digitalocean/requests/compute_v2/upgrade.rb +44 -0
  53. data/lib/fog/digitalocean/service.rb +51 -0
  54. data/lib/fog/linode/models/compute/kernels.rb +1 -1
  55. data/lib/fog/opennebula/models/compute/flavor.rb +13 -13
  56. data/lib/fog/opennebula/requests/compute/template_pool.rb +14 -11
  57. data/lib/fog/openstack.rb +2 -0
  58. data/lib/fog/openstack/core.rb +30 -3
  59. data/lib/fog/openstack/identity.rb +8 -7
  60. data/lib/fog/openstack/identity_v3.rb +1 -0
  61. data/lib/fog/openstack/image.rb +35 -130
  62. data/lib/fog/openstack/image_v1.rb +142 -0
  63. data/lib/fog/openstack/image_v2.rb +137 -0
  64. data/lib/fog/openstack/models/image_v1/image.rb +78 -0
  65. data/lib/fog/openstack/models/image_v1/images.rb +70 -0
  66. data/lib/fog/openstack/models/image_v2/image.rb +149 -0
  67. data/lib/fog/openstack/models/image_v2/images.rb +67 -0
  68. data/lib/fog/openstack/models/orchestration/stack.rb +5 -0
  69. data/lib/fog/openstack/models/volume/volume_type.rb +25 -0
  70. data/lib/fog/openstack/orchestration.rb +1 -0
  71. data/lib/fog/openstack/requests/compute/server_actions.rb +14 -3
  72. data/lib/fog/openstack/requests/{image → image_v1}/add_member_to_image.rb +2 -0
  73. data/lib/fog/openstack/requests/image_v1/create_image.rb +78 -0
  74. data/lib/fog/openstack/requests/image_v1/delete_image.rb +25 -0
  75. data/lib/fog/openstack/requests/image_v1/get_image.rb +47 -0
  76. data/lib/fog/openstack/requests/image_v1/get_image_by_id.rb +34 -0
  77. data/lib/fog/openstack/requests/image_v1/get_image_members.rb +31 -0
  78. data/lib/fog/openstack/requests/image_v1/get_shared_images.rb +31 -0
  79. data/lib/fog/openstack/requests/image_v1/list_public_images.rb +35 -0
  80. data/lib/fog/openstack/requests/image_v1/list_public_images_detailed.rb +37 -0
  81. data/lib/fog/openstack/requests/image_v1/remove_member_from_image.rb +25 -0
  82. data/lib/fog/openstack/requests/image_v1/set_tenant.rb +21 -0
  83. data/lib/fog/openstack/requests/image_v1/update_image.rb +66 -0
  84. data/lib/fog/openstack/requests/image_v1/update_image_members.rb +39 -0
  85. data/lib/fog/openstack/requests/image_v2/add_member_to_image.rb +26 -0
  86. data/lib/fog/openstack/requests/image_v2/add_tag_to_image.rb +25 -0
  87. data/lib/fog/openstack/requests/image_v2/create_image.rb +54 -0
  88. data/lib/fog/openstack/requests/image_v2/deactivate_image.rb +25 -0
  89. data/lib/fog/openstack/requests/image_v2/delete_image.rb +25 -0
  90. data/lib/fog/openstack/requests/image_v2/download_image.rb +29 -0
  91. data/lib/fog/openstack/requests/image_v2/get_image.rb +47 -0
  92. data/lib/fog/openstack/requests/image_v2/get_image_by_id.rb +34 -0
  93. data/lib/fog/openstack/requests/image_v2/get_image_members.rb +31 -0
  94. data/lib/fog/openstack/requests/image_v2/get_member_details.rb +33 -0
  95. data/lib/fog/openstack/requests/image_v2/get_shared_images.rb +31 -0
  96. data/lib/fog/openstack/requests/image_v2/list_images.rb +35 -0
  97. data/lib/fog/openstack/requests/image_v2/reactivate_image.rb +25 -0
  98. data/lib/fog/openstack/requests/image_v2/remove_member_from_image.rb +25 -0
  99. data/lib/fog/openstack/requests/image_v2/remove_tag_from_image.rb +25 -0
  100. data/lib/fog/openstack/requests/image_v2/set_tenant.rb +21 -0
  101. data/lib/fog/openstack/requests/image_v2/update_image.rb +49 -0
  102. data/lib/fog/openstack/requests/image_v2/update_image_member.rb +34 -0
  103. data/lib/fog/openstack/requests/image_v2/upload_image.rb +30 -0
  104. data/lib/fog/openstack/requests/orchestration/patch_stack.rb +37 -0
  105. data/lib/fog/openstack/requests/volume/create_volume_type.rb +41 -0
  106. data/lib/fog/openstack/requests/{image/delete_image.rb → volume/delete_volume_type.rb} +6 -6
  107. data/lib/fog/openstack/requests/volume/get_quota_usage.rb +44 -0
  108. data/lib/fog/openstack/requests/volume/get_volume_type_details.rb +1 -1
  109. data/lib/fog/openstack/requests/volume/update_volume_type.rb +41 -0
  110. data/lib/fog/openstack/volume.rb +5 -0
  111. data/lib/fog/rackspace/models/compute_v2/server.rb +11 -1
  112. data/lib/fog/rackspace/models/compute_v2/servers.rb +2 -2
  113. data/lib/fog/rackspace/requests/compute_v2/create_server.rb +7 -2
  114. data/lib/fog/vcloud_director/requests/compute/get_execute_query.rb +13 -10
  115. data/lib/fog/version.rb +1 -1
  116. data/lib/fog/vsphere/models/compute/server.rb +1 -1
  117. data/lib/tasks/changelog_task.rb +1 -0
  118. data/spec/fog/openstack/identity_v3/authv3_a.yml +45 -52
  119. data/spec/fog/openstack/identity_v3/authv3_b.yml +45 -52
  120. data/spec/fog/openstack/identity_v3/authv3_c.yml +95 -101
  121. data/spec/fog/openstack/identity_v3/authv3_project.yml +68 -75
  122. data/spec/fog/openstack/identity_v3/authv3_token.yml +212 -174
  123. data/spec/fog/openstack/identity_v3/authv3_unscoped.yml +278 -266
  124. data/spec/fog/openstack/identity_v3/authv3_unscoped_reauth.yml +190 -202
  125. data/spec/fog/openstack/identity_v3/common_setup.yml +67 -445
  126. data/spec/fog/openstack/identity_v3/idv3_credential.yml +56 -26
  127. data/spec/fog/openstack/identity_v3/idv3_credential_crud.yml +292 -152
  128. data/spec/fog/openstack/identity_v3/idv3_domain.yml +99 -49
  129. data/spec/fog/openstack/identity_v3/idv3_domain_crud.yml +239 -119
  130. data/spec/fog/openstack/identity_v3/idv3_domain_group_roles_mutation.yml +414 -205
  131. data/spec/fog/openstack/identity_v3/idv3_domain_roles_mutation.yml +259 -136
  132. data/spec/fog/openstack/identity_v3/idv3_endpoint.yml +474 -472
  133. data/spec/fog/openstack/identity_v3/idv3_endpoints_crud.yml +679 -626
  134. data/spec/fog/openstack/identity_v3/idv3_group_crud_mutation.yml +536 -269
  135. data/spec/fog/openstack/identity_v3/idv3_policy.yml +76 -36
  136. data/spec/fog/openstack/identity_v3/idv3_policy_crud.yml +197 -97
  137. data/spec/fog/openstack/identity_v3/idv3_project.yml +135 -85
  138. data/spec/fog/openstack/identity_v3/idv3_project_crud.yml +237 -127
  139. data/spec/fog/openstack/identity_v3/idv3_project_group_user_roles_mutation.yml +625 -295
  140. data/spec/fog/openstack/identity_v3/idv3_project_hier_crud_list.yml +716 -355
  141. data/spec/fog/openstack/identity_v3/idv3_role.yml +134 -88
  142. data/spec/fog/openstack/identity_v3/idv3_role_crud.yml +312 -118
  143. data/spec/fog/openstack/identity_v3/idv3_service.yml +179 -133
  144. data/spec/fog/openstack/identity_v3/idv3_services_crud.yml +306 -212
  145. data/spec/fog/openstack/identity_v3/idv3_token.yml +213 -177
  146. data/spec/fog/openstack/identity_v3/idv3_user_crud.yml +345 -188
  147. data/spec/fog/openstack/identity_v3/idv3_users.yml +182 -116
  148. data/spec/fog/openstack/identity_v3_spec.rb +103 -85
  149. data/spec/fog/openstack/{identity_v3/idv3_other_region.yml → image_v1/common_setup.yml} +50 -93
  150. data/spec/fog/openstack/image_v1/list_images.yml +54 -0
  151. data/spec/fog/openstack/image_v1_spec.rb +24 -0
  152. data/spec/fog/openstack/image_v2/common_setup.yml +144 -0
  153. data/spec/fog/openstack/image_v2/image_schema.json +190 -0
  154. data/spec/fog/openstack/image_v2/image_v2_activation.yml +3988 -0
  155. data/spec/fog/openstack/image_v2/image_v2_create_id.yml +291 -0
  156. data/spec/fog/openstack/image_v2/image_v2_crud.yml +437 -0
  157. data/spec/fog/openstack/image_v2/image_v2_member_crudl.yml +451 -0
  158. data/spec/fog/openstack/image_v2/image_v2_tags.yml +532 -0
  159. data/spec/fog/openstack/image_v2/image_v2_upload_download.yml +3966 -0
  160. data/spec/fog/openstack/image_v2/minimal.ova +0 -0
  161. data/spec/fog/openstack/image_v2_spec.rb +285 -0
  162. data/spec/fog/openstack/image_v2_upload_spec.rb +74 -0
  163. data/spec/fog/openstack/shared_context.rb +14 -10
  164. data/tests/compute/helper.rb +0 -3
  165. data/tests/digitalocean/requests/compute_v2/list_flavors_tests.rb +25 -0
  166. data/tests/digitalocean/requests/compute_v2/list_images_tests.rb +25 -0
  167. data/tests/digitalocean/requests/compute_v2/list_regions_tests.rb +21 -0
  168. data/tests/digitalocean/requests/compute_v2/server_tests.rb +77 -0
  169. data/tests/helpers/mock_helper.rb +1 -0
  170. data/tests/opennebula/models/compute/flavor_tests.rb +1 -1
  171. data/tests/openstack/requests/orchestration/stack_tests.rb +5 -1
  172. data/tests/openstack/requests/volume/volume_type_tests.rb +32 -0
  173. data/tests/rackspace/models/compute_v2/server_tests.rb +7 -7
  174. metadata +160 -236
  175. data/gemfiles/Gemfile-ruby-1.8.7 +0 -17
  176. data/lib/fog/bin/xenserver.rb +0 -29
  177. data/lib/fog/openstack/models/image/image.rb +0 -76
  178. data/lib/fog/openstack/models/image/images.rb +0 -67
  179. data/lib/fog/openstack/requests/image/create_image.rb +0 -76
  180. data/lib/fog/openstack/requests/image/get_image.rb +0 -45
  181. data/lib/fog/openstack/requests/image/get_image_by_id.rb +0 -32
  182. data/lib/fog/openstack/requests/image/get_image_members.rb +0 -29
  183. data/lib/fog/openstack/requests/image/get_shared_images.rb +0 -29
  184. data/lib/fog/openstack/requests/image/list_public_images.rb +0 -33
  185. data/lib/fog/openstack/requests/image/list_public_images_detailed.rb +0 -35
  186. data/lib/fog/openstack/requests/image/remove_member_from_image.rb +0 -23
  187. data/lib/fog/openstack/requests/image/set_tenant.rb +0 -19
  188. data/lib/fog/openstack/requests/image/update_image.rb +0 -64
  189. data/lib/fog/openstack/requests/image/update_image_members.rb +0 -37
  190. data/lib/fog/xenserver.rb +0 -1
  191. data/lib/fog/xenserver/CHANGELOG.md +0 -77
  192. data/lib/fog/xenserver/compute.rb +0 -186
  193. data/lib/fog/xenserver/core.rb +0 -94
  194. data/lib/fog/xenserver/examples/README.md +0 -11
  195. data/lib/fog/xenserver/examples/chage_default_storage_repository.md +0 -99
  196. data/lib/fog/xenserver/examples/creating_servers.md +0 -168
  197. data/lib/fog/xenserver/examples/getting_started.md +0 -163
  198. data/lib/fog/xenserver/examples/networks-and-vlans.rb +0 -44
  199. data/lib/fog/xenserver/examples/storage_repositories.md +0 -94
  200. data/lib/fog/xenserver/models/compute/blob.rb +0 -22
  201. data/lib/fog/xenserver/models/compute/blobs.rb +0 -25
  202. data/lib/fog/xenserver/models/compute/bond.rb +0 -23
  203. data/lib/fog/xenserver/models/compute/bonds.rb +0 -25
  204. data/lib/fog/xenserver/models/compute/console.rb +0 -29
  205. data/lib/fog/xenserver/models/compute/consoles.rb +0 -25
  206. data/lib/fog/xenserver/models/compute/crash_dump.rb +0 -19
  207. data/lib/fog/xenserver/models/compute/crash_dumps.rb +0 -25
  208. data/lib/fog/xenserver/models/compute/dr_task.rb +0 -17
  209. data/lib/fog/xenserver/models/compute/dr_tasks.rb +0 -25
  210. data/lib/fog/xenserver/models/compute/gpu_group.rb +0 -22
  211. data/lib/fog/xenserver/models/compute/gpu_groups.rb +0 -25
  212. data/lib/fog/xenserver/models/compute/guest_metrics.rb +0 -26
  213. data/lib/fog/xenserver/models/compute/host.rb +0 -156
  214. data/lib/fog/xenserver/models/compute/host_cpu.rb +0 -34
  215. data/lib/fog/xenserver/models/compute/host_crash_dump.rb +0 -20
  216. data/lib/fog/xenserver/models/compute/host_crash_dumps.rb +0 -25
  217. data/lib/fog/xenserver/models/compute/host_metrics.rb +0 -26
  218. data/lib/fog/xenserver/models/compute/host_patch.rb +0 -25
  219. data/lib/fog/xenserver/models/compute/host_patchs.rb +0 -25
  220. data/lib/fog/xenserver/models/compute/hosts.rb +0 -25
  221. data/lib/fog/xenserver/models/compute/network.rb +0 -93
  222. data/lib/fog/xenserver/models/compute/networks.rb +0 -29
  223. data/lib/fog/xenserver/models/compute/pbd.rb +0 -37
  224. data/lib/fog/xenserver/models/compute/pbds.rb +0 -29
  225. data/lib/fog/xenserver/models/compute/pci.rb +0 -22
  226. data/lib/fog/xenserver/models/compute/pcis.rb +0 -25
  227. data/lib/fog/xenserver/models/compute/pgpu.rb +0 -20
  228. data/lib/fog/xenserver/models/compute/pgpus.rb +0 -25
  229. data/lib/fog/xenserver/models/compute/pif.rb +0 -54
  230. data/lib/fog/xenserver/models/compute/pif_metrics.rb +0 -28
  231. data/lib/fog/xenserver/models/compute/pifs.rb +0 -29
  232. data/lib/fog/xenserver/models/compute/pifs_metrics.rb +0 -25
  233. data/lib/fog/xenserver/models/compute/pool.rb +0 -75
  234. data/lib/fog/xenserver/models/compute/pool_patch.rb +0 -24
  235. data/lib/fog/xenserver/models/compute/pool_patchs.rb +0 -25
  236. data/lib/fog/xenserver/models/compute/pools.rb +0 -29
  237. data/lib/fog/xenserver/models/compute/role.rb +0 -19
  238. data/lib/fog/xenserver/models/compute/roles.rb +0 -25
  239. data/lib/fog/xenserver/models/compute/server.rb +0 -251
  240. data/lib/fog/xenserver/models/compute/server_appliance.rb +0 -21
  241. data/lib/fog/xenserver/models/compute/server_appliances.rb +0 -25
  242. data/lib/fog/xenserver/models/compute/servers.rb +0 -64
  243. data/lib/fog/xenserver/models/compute/storage_manager.rb +0 -28
  244. data/lib/fog/xenserver/models/compute/storage_managers.rb +0 -25
  245. data/lib/fog/xenserver/models/compute/storage_repositories.rb +0 -27
  246. data/lib/fog/xenserver/models/compute/storage_repository.rb +0 -90
  247. data/lib/fog/xenserver/models/compute/tunnel.rb +0 -20
  248. data/lib/fog/xenserver/models/compute/tunnels.rb +0 -25
  249. data/lib/fog/xenserver/models/compute/vbd.rb +0 -88
  250. data/lib/fog/xenserver/models/compute/vbd_metrics.rb +0 -25
  251. data/lib/fog/xenserver/models/compute/vbds.rb +0 -29
  252. data/lib/fog/xenserver/models/compute/vdi.rb +0 -102
  253. data/lib/fog/xenserver/models/compute/vdis.rb +0 -25
  254. data/lib/fog/xenserver/models/compute/vif.rb +0 -56
  255. data/lib/fog/xenserver/models/compute/vifs.rb +0 -25
  256. data/lib/fog/xenserver/models/compute/vlan.rb +0 -78
  257. data/lib/fog/xenserver/models/compute/vlans.rb +0 -35
  258. data/lib/fog/xenserver/models/compute/vmpp.rb +0 -35
  259. data/lib/fog/xenserver/models/compute/vmpps.rb +0 -25
  260. data/lib/fog/xenserver/models/compute/vtpm.rb +0 -18
  261. data/lib/fog/xenserver/models/compute/vtpms.rb +0 -25
  262. data/lib/fog/xenserver/parser.rb +0 -34
  263. data/lib/fog/xenserver/parsers/get_hosts.rb +0 -16
  264. data/lib/fog/xenserver/parsers/get_networks.rb +0 -16
  265. data/lib/fog/xenserver/parsers/get_pools.rb +0 -16
  266. data/lib/fog/xenserver/parsers/get_records.rb +0 -16
  267. data/lib/fog/xenserver/parsers/get_storage_repositories.rb +0 -16
  268. data/lib/fog/xenserver/parsers/get_vbds.rb +0 -16
  269. data/lib/fog/xenserver/parsers/get_vifs.rb +0 -16
  270. data/lib/fog/xenserver/parsers/get_vms.rb +0 -16
  271. data/lib/fog/xenserver/requests/compute/clone_server.rb +0 -30
  272. data/lib/fog/xenserver/requests/compute/create_network.rb +0 -46
  273. data/lib/fog/xenserver/requests/compute/create_server.rb +0 -144
  274. data/lib/fog/xenserver/requests/compute/create_sr.rb +0 -88
  275. data/lib/fog/xenserver/requests/compute/create_vbd.rb +0 -43
  276. data/lib/fog/xenserver/requests/compute/create_vdi.rb +0 -57
  277. data/lib/fog/xenserver/requests/compute/create_vif.rb +0 -62
  278. data/lib/fog/xenserver/requests/compute/create_vlan.rb +0 -43
  279. data/lib/fog/xenserver/requests/compute/destroy_network.rb +0 -31
  280. data/lib/fog/xenserver/requests/compute/destroy_record.rb +0 -11
  281. data/lib/fog/xenserver/requests/compute/destroy_server.rb +0 -20
  282. data/lib/fog/xenserver/requests/compute/destroy_sr.rb +0 -28
  283. data/lib/fog/xenserver/requests/compute/destroy_vdi.rb +0 -20
  284. data/lib/fog/xenserver/requests/compute/destroy_vif.rb +0 -20
  285. data/lib/fog/xenserver/requests/compute/destroy_vlan.rb +0 -30
  286. data/lib/fog/xenserver/requests/compute/disable_host.rb +0 -23
  287. data/lib/fog/xenserver/requests/compute/eject_vbd.rb +0 -17
  288. data/lib/fog/xenserver/requests/compute/enable_host.rb +0 -22
  289. data/lib/fog/xenserver/requests/compute/get_record.rb +0 -31
  290. data/lib/fog/xenserver/requests/compute/get_records.rb +0 -24
  291. data/lib/fog/xenserver/requests/compute/insert_vbd.rb +0 -17
  292. data/lib/fog/xenserver/requests/compute/provision_server.rb +0 -17
  293. data/lib/fog/xenserver/requests/compute/reboot_host.rb +0 -17
  294. data/lib/fog/xenserver/requests/compute/reboot_server.rb +0 -17
  295. data/lib/fog/xenserver/requests/compute/scan_sr.rb +0 -17
  296. data/lib/fog/xenserver/requests/compute/set_affinity.rb +0 -19
  297. data/lib/fog/xenserver/requests/compute/set_attribute.rb +0 -19
  298. data/lib/fog/xenserver/requests/compute/shutdown_host.rb +0 -17
  299. data/lib/fog/xenserver/requests/compute/shutdown_server.rb +0 -17
  300. data/lib/fog/xenserver/requests/compute/snapshot_revert.rb +0 -24
  301. data/lib/fog/xenserver/requests/compute/snapshot_server.rb +0 -17
  302. data/lib/fog/xenserver/requests/compute/start_server.rb +0 -17
  303. data/lib/fog/xenserver/requests/compute/start_vm.rb +0 -19
  304. data/lib/fog/xenserver/requests/compute/unplug_pbd.rb +0 -20
  305. data/lib/fog/xenserver/requests/compute/unplug_vbd.rb +0 -25
  306. data/lib/fog/xenserver/utilities.rb +0 -8
  307. data/tests/xenserver/README +0 -21
  308. data/tests/xenserver/compute_tests.rb +0 -51
  309. data/tests/xenserver/helper.rb +0 -36
  310. data/tests/xenserver/models/compute/console_test.rb +0 -35
  311. data/tests/xenserver/models/compute/consoles_test.rb +0 -19
  312. data/tests/xenserver/models/compute/host_cpu_tests.rb +0 -58
  313. data/tests/xenserver/models/compute/host_metrics_tests.rb +0 -48
  314. data/tests/xenserver/models/compute/host_tests.rb +0 -98
  315. data/tests/xenserver/models/compute/hosts_tests.rb +0 -22
  316. data/tests/xenserver/models/compute/network_tests.rb +0 -79
  317. data/tests/xenserver/models/compute/networks_tests.rb +0 -22
  318. data/tests/xenserver/models/compute/pbd_tests.rb +0 -76
  319. data/tests/xenserver/models/compute/pbds_tests.rb +0 -22
  320. data/tests/xenserver/models/compute/pif_tests.rb +0 -58
  321. data/tests/xenserver/models/compute/pifs_tests.rb +0 -22
  322. data/tests/xenserver/models/compute/pool_tests.rb +0 -56
  323. data/tests/xenserver/models/compute/pools_tests.rb +0 -30
  324. data/tests/xenserver/models/compute/server_tests.rb +0 -184
  325. data/tests/xenserver/models/compute/servers_tests.rb +0 -89
  326. data/tests/xenserver/models/compute/storage_repositories_tests.rb +0 -30
  327. data/tests/xenserver/models/compute/storage_repository_tests.rb +0 -114
  328. data/tests/xenserver/models/compute/vbd_tests.rb +0 -115
  329. data/tests/xenserver/models/compute/vbds_tests.rb +0 -22
  330. data/tests/xenserver/models/compute/vif_tests.rb +0 -53
  331. data/tests/xenserver/models/compute/vifs_tests.rb +0 -22
  332. data/tests/xenserver/models/compute/vlan_tests.rb +0 -76
  333. data/tests/xenserver/models/compute/vlans_tests.rb +0 -36
  334. data/tests/xenserver/requests/compute/clone_server_tests.rb +0 -32
  335. data/tests/xenserver/requests/compute/create_network_tests.rb +0 -20
  336. data/tests/xenserver/requests/compute/create_server_tests.rb +0 -129
  337. data/tests/xenserver/requests/compute/create_sr_tests.rb +0 -54
  338. data/tests/xenserver/requests/compute/create_vdi_tests.rb +0 -80
  339. data/tests/xenserver/requests/compute/create_vif_tests.rb +0 -88
  340. data/tests/xenserver/requests/compute/create_vlan_tests.rb +0 -36
  341. data/tests/xenserver/requests/compute/destroy_network_tests.rb +0 -13
  342. data/tests/xenserver/requests/compute/destroy_sr_tests.rb +0 -46
  343. data/tests/xenserver/requests/compute/destroy_vdi_tests.rb +0 -25
  344. data/tests/xenserver/requests/compute/destroy_vlan_tests.rb +0 -36
  345. data/tests/xenserver/requests/compute/disable_host_tests.rb +0 -16
  346. data/tests/xenserver/requests/compute/enable_host_tests.rb +0 -16
  347. data/tests/xenserver/requests/compute/get_record_tests.rb +0 -15
  348. data/tests/xenserver/requests/compute/set_attribute_tests.rb +0 -66
  349. data/tests/xenserver/requests/compute/unplug_pbd_tests.rb +0 -48
  350. data/tests/xenserver/xenserver_tests.rb +0 -33
@@ -0,0 +1,285 @@
1
+ require 'fog/openstack/image_v2'
2
+
3
+ if RUBY_VERSION =~ /1.8/
4
+ require File.expand_path('../shared_context', __FILE__)
5
+ else
6
+ require_relative './shared_context'
7
+ end
8
+
9
+ RSpec.describe Fog::Image::OpenStack do
10
+
11
+ spec_data_folder = 'spec/fog/openstack/image_v2'
12
+
13
+ include_context 'OpenStack specs with VCR'
14
+ before :all do
15
+ setup_vcr_and_service(
16
+ :vcr_directory => spec_data_folder,
17
+ # :service_class => Fog::Image::OpenStack::V2
18
+ :service_class => Fog::Image::OpenStack # No need to be explicit - Fog will choose the latest available version
19
+ )
20
+ end
21
+
22
+ def cleanup_image image, image_name=nil, image_id=nil
23
+ # Delete the image
24
+ image.destroy if image
25
+ image_by_id = @service.images.find_by_id(image_id) rescue false if image_id
26
+ image_by_id.destroy if image_by_id
27
+ @service.images.all(:name => image_name).each do |image|
28
+ image.destroy
29
+ end if image_name
30
+ # Check that the deletion worked
31
+ expect { @service.images.find_by_id image_id }.to raise_error(Fog::Image::OpenStack::NotFound) if image_id
32
+ expect(@service.images.all(:name => image_name).length).to be 0 if image_name
33
+ end
34
+
35
+ it "CRUD & list images" do
36
+ VCR.use_cassette('image_v2_crud') do
37
+ image_name = 'foobar'
38
+ image_rename = 'baz'
39
+
40
+ expect(@service.images.all).to_not be_nil
41
+ begin
42
+ # Create an image called foobar
43
+ foobar_image = @service.images.create(:name => image_name)
44
+ foobar_id = foobar_image.id
45
+ expect(@service.images.all(:name => image_name).length).to be 1
46
+ expect(foobar_image.status).to eq 'queued'
47
+
48
+ # Rename it to baz
49
+ foobar_image.update(:name => image_rename) # see "Patch images" test below - for now this will be a simple synthesis of a JSON patch with op = 'replace'
50
+ expect(foobar_image.name).to eq image_rename
51
+ baz_image = @service.images.find_by_id foobar_id
52
+ expect(baz_image).to_not be_nil
53
+ expect(baz_image.id).to eq foobar_id
54
+ expect(baz_image.name).to eq image_rename
55
+
56
+ # Read the image freshly by listing images filtered by the new name
57
+ images = @service.images.all(:name => image_rename)
58
+ expect(images.length).to be 1
59
+ expect(images.first.id).to eq baz_image.id
60
+
61
+ ensure
62
+ cleanup_image baz_image
63
+ @service.images.all.select { |image| [image_name, image_rename].include? image.name }.each do |image|
64
+ image.destroy
65
+ end
66
+ # Check that the deletion worked
67
+ expect(@service.images.all.select { |image| [image_name, image_rename].include? image.name }.length).to be 0
68
+ end
69
+ end
70
+ end
71
+
72
+ it "Image creation with ID" do
73
+ VCR.use_cassette('image_v2_create_id') do
74
+ image_name = 'foobar_id'
75
+
76
+ # Here be dragons - highly recommend not to supply an ID when creating
77
+ begin
78
+ # increment this identifier when running test more than once, unless the VCR recording is being used
79
+ identifier = '11111111-2222-3333-aaaa-bbbbbbccccdf'
80
+
81
+ # Create an image with a specified ID
82
+ foobar_image = @service.images.create(:name => 'foobar_id', :id => identifier)
83
+ foobar_id = foobar_image.id
84
+ expect(@service.images.all(:name => image_name).length).to be 1
85
+ expect(foobar_image.status).to eq 'queued'
86
+ expect(foobar_id).to eq identifier
87
+
88
+ get_image = @service.images.find_by_id(identifier)
89
+ expect(get_image.name).to eq image_name
90
+
91
+ ensure
92
+ cleanup_image foobar_image, image_name, foobar_id
93
+ end
94
+ end
95
+ end
96
+
97
+ it "Image creation with specified location" do
98
+ VCR.use_cassette('image_v2_create_location') do
99
+
100
+ begin
101
+ # Create image with location of image data
102
+ pending "Figure out 'Create image with location of image data'"
103
+ fail
104
+
105
+ ensure
106
+ end
107
+ end
108
+ end
109
+
110
+ it "Image upload & download in bulk" do
111
+ VCR.use_cassette('image_v2_upload_download') do
112
+ image_name = 'foobar_up1'
113
+ begin
114
+ image_path = "#{spec_data_folder}/minimal.ova" # "no-op" virtual machine image, 80kB .ova file containing 64Mb dynamic disk
115
+
116
+ foobar_image = @service.images.create(:name => image_name,
117
+ :container_format => 'ovf',
118
+ :disk_format => 'vmdk'
119
+ )
120
+ foobar_id = foobar_image.id
121
+
122
+ # Upload data from File or IO object
123
+ foobar_image.upload_data File.new(image_path, 'r')
124
+
125
+ # Status should be saving or active
126
+ expect(@service.images.find_by_id(foobar_id).status).to satisfy { |value| ['saving', 'active'].include? value }
127
+
128
+ # Get an IO object from which to download image data - wait until finished saving though
129
+ while @service.images.find_by_id(foobar_id).status == 'saving' do
130
+ sleep 1
131
+ end
132
+ expect(@service.images.find_by_id(foobar_id).status).to eq 'active'
133
+
134
+ # Bulk download
135
+ downloaded_data = foobar_image.download_data
136
+ expect(downloaded_data.size).to eq File.size(image_path)
137
+
138
+ ensure
139
+ cleanup_image foobar_image, image_name
140
+ end
141
+ end
142
+ end
143
+
144
+ it "Deactivates and activates an image" do
145
+ VCR.use_cassette('image_v2_activation') do
146
+ image_name = 'foobar3a'
147
+ image_path = "spec/fog/openstack/image_v2/minimal.ova" # "no-op" virtual machine image, 80kB .ova file containing 64Mb dynamic disk
148
+
149
+ begin
150
+ # Create an image called foobar2
151
+ foobar_image = @service.images.create(:name => image_name,
152
+ :container_format => 'ovf',
153
+ :disk_format => 'vmdk'
154
+ )
155
+ foobar_id = foobar_image.id
156
+ foobar_image.upload_data File.new(image_path, 'r')
157
+ while @service.images.find_by_id(foobar_id).status == 'saving' do
158
+ sleep 1
159
+ end
160
+
161
+ foobar_image.deactivate
162
+ expect { foobar_image.download_data }.to raise_error(Excon::Errors::Forbidden)
163
+
164
+ foobar_image.reactivate
165
+ expect { foobar_image.download_data }.not_to raise_error
166
+ ensure
167
+ cleanup_image foobar_image, image_name
168
+ end
169
+ end
170
+ end
171
+
172
+ it "Adds and deletes image tags" do
173
+ VCR.use_cassette('image_v2_tags') do
174
+ image_name = 'foobar3'
175
+ begin
176
+ # Create an image
177
+ foobar_image = @service.images.create(:name => image_name,
178
+ :container_format => 'ovf',
179
+ :disk_format => 'vmdk'
180
+ )
181
+ foobar_id = foobar_image.id
182
+
183
+ foobar_image.add_tag 'tag1'
184
+ expect(@service.images.find_by_id(foobar_id).tags).to contain_exactly('tag1')
185
+
186
+ foobar_image.add_tags ['tag2', 'tag3', 'tag4']
187
+ expect(@service.images.find_by_id(foobar_id).tags).to contain_exactly('tag1', 'tag2', 'tag3', 'tag4')
188
+
189
+ foobar_image.remove_tag 'tag2'
190
+ expect(@service.images.find_by_id(foobar_id).tags).to contain_exactly('tag1', 'tag3', 'tag4')
191
+
192
+ foobar_image.remove_tags ['tag1', 'tag3']
193
+ expect(@service.images.find_by_id(foobar_id).tags).to contain_exactly('tag4')
194
+
195
+ ensure
196
+ cleanup_image foobar_image, image_name
197
+ end
198
+ end
199
+ end
200
+
201
+ it "CRUD and list image members" do
202
+ VCR.use_cassette('image_v2_member_crudl') do
203
+ image_name = 'foobar4'
204
+ tenant_id = 'tenant1'
205
+ begin
206
+ # Create an image called foobar
207
+ foobar_image = @service.images.create(:name => image_name)
208
+ foobar_id = foobar_image.id
209
+
210
+ expect(foobar_image.members.size).to be 0
211
+ foobar_image.add_member tenant_id
212
+ expect(foobar_image.members.size).to be 1
213
+
214
+ member = foobar_image.member tenant_id
215
+ expect(member).to_not be_nil
216
+ expect(member['status']).to eq 'pending'
217
+
218
+ member['status'] = 'accepted'
219
+ foobar_image.update_member member
220
+ expect(foobar_image.member(tenant_id)['status']).to eq 'accepted'
221
+
222
+ foobar_image.remove_member member['member_id']
223
+ expect(foobar_image.members.size).to be 0
224
+ ensure
225
+ cleanup_image foobar_image, image_name
226
+ end
227
+ end
228
+ end
229
+
230
+ it "Gets JSON schemas for 'images', 'image', 'members', 'member'" do
231
+ VCR.use_cassette('image_v2_schemas') do
232
+ pending 'Fetching JSON schemas: to be implemented'
233
+ fail
234
+ end
235
+ end
236
+
237
+ it "CRUD resource types" do
238
+ VCR.use_cassette('image_v2_resource_type_crud') do
239
+ pending 'CRUD resource types: to be implemented'
240
+ fail
241
+ end
242
+ end
243
+
244
+ it "CRUD namespace metadata definition" do
245
+ VCR.use_cassette('image_v2_namespace_metadata_crud') do
246
+ pending 'CRUD namespace metadata definition: to be implemented'
247
+ fail
248
+ end
249
+ end
250
+
251
+ it "CRUD property metadata definition" do
252
+ VCR.use_cassette('image_v2_property_metadata_crud') do
253
+ pending 'CRUD property metadata definition: to be implemented'
254
+ fail
255
+ end
256
+ end
257
+
258
+ it "CRUD object metadata definition" do
259
+ VCR.use_cassette('image_v2_object_metadata_crud') do
260
+ pending 'CRUD object metadata definition: to be implemented'
261
+ fail
262
+ end
263
+ end
264
+
265
+ it "CRUD tag metadata definition" do
266
+ VCR.use_cassette('image_v2_tag_metadata_crud') do
267
+ pending 'CRUD tag metadata definition: to be implemented'
268
+ fail
269
+ end
270
+ end
271
+
272
+ it "CRUD schema metadata definition" do
273
+ VCR.use_cassette('image_v2_schema_metadata_crud') do
274
+ pending 'CRUD schema metadata definition: to be implemented'
275
+ fail
276
+ end
277
+ end
278
+
279
+ it "Creates, lists & gets tasks" do
280
+ VCR.use_cassette('image_v2_task_clg') do
281
+ pending 'Creates, lists & gets tasks: to be implemented'
282
+ fail
283
+ end
284
+ end
285
+ end
@@ -0,0 +1,74 @@
1
+ require 'fog/openstack/identity_v3'
2
+ require 'fog/openstack/image_v2'
3
+
4
+ RSpec.describe Fog::Image::OpenStack do
5
+
6
+ it "Upload/download image data using chunked IO" do
7
+ if ENV['OS_AUTH_URL'] # We only run this against a live system, because VCR's use of Webmock stops Excon :response_block from working correctly
8
+
9
+ @os_auth_url = ENV['OS_AUTH_URL']
10
+
11
+ # allow us to ignore dev certificates on servers
12
+ Excon.defaults[:ssl_verify_peer] = false if ENV['SSL_VERIFY_PEER'] == 'false'
13
+
14
+ # setup the service object
15
+ @service = Fog::Image::OpenStack.new({
16
+ :openstack_auth_url => "#{@os_auth_url}/auth/tokens",
17
+ :openstack_region => ENV['OS_REGION_NAME'] || 'RegionOne',
18
+ :openstack_api_key => ENV['OS_PASSWORD'] || 'password',
19
+ :openstack_username => ENV['OS_USERNAME'] || 'admin',
20
+ :openstack_domain_name => ENV['OS_USER_DOMAIN_NAME'] || 'Default',
21
+ :openstack_project_name => ENV['OS_PROJECT_NAME'] || 'admin'
22
+ }) unless @service
23
+
24
+ spec_data_folder = 'spec/fog/openstack/image_v2'
25
+
26
+ begin
27
+ ####
28
+ ## Upload & download data using request/response blocks so we can stream data effectively
29
+ ####
30
+ image_path = "#{spec_data_folder}/minimal.ova" # "no-op" virtual machine image, 80kB .ova file containing 64Mb dynamic disk
31
+
32
+ foobar_image = @service.images.create(:name => 'foobar_up2',
33
+ :container_format => 'ovf',
34
+ :disk_format => 'vmdk'
35
+ )
36
+ foobar_id = foobar_image.id
37
+
38
+ data_file = File.new(image_path, 'r')
39
+ chunker = lambda do
40
+ # Excon.defaults[:chunk_size] defaults to 1048576, ie 1MB
41
+ # to_s will convert the nil received after everything is read to the final empty chunk
42
+ data_file.read(Excon.defaults[:chunk_size]).to_s
43
+ end
44
+ foobar_image.upload_data(:request_block => chunker)
45
+
46
+ # Make sure the upload is finished
47
+ while @service.images.find_by_id(foobar_id).status == 'saving' do
48
+ sleep 1
49
+ end
50
+ expect(@service.images.find_by_id(foobar_id).status).to eq 'active'
51
+
52
+ size = 0
53
+ read_block = lambda do |chunk, remaining, total|
54
+ size += chunk.size
55
+ end
56
+ foobar_image.download_data(:response_block => read_block)
57
+ expect(size).to eq File.size(image_path)
58
+
59
+ ensure
60
+ # Delete the image
61
+ foobar_image.destroy if foobar_image
62
+
63
+ @service.images.all(:name => 'foobar_up2').each do |image|
64
+ image.destroy
65
+ end
66
+
67
+ # Check that the deletion worked
68
+ expect { @service.images.find_by_id foobar_id }.to raise_error(Fog::Image::OpenStack::NotFound) if foobar_id
69
+ expect(@service.images.all(:name => 'foobar_up2').length).to be 0
70
+ end
71
+ end
72
+ end
73
+
74
+ end
@@ -3,6 +3,9 @@ require 'rspec/expectations'
3
3
  require 'vcr'
4
4
  require 'fog/openstack/identity'
5
5
  require 'fog/openstack/identity_v3'
6
+ require 'fog/openstack/image'
7
+ require 'fog/openstack/image_v1'
8
+ require 'fog/openstack/image_v2'
6
9
  require 'fog/openstack/network'
7
10
 
8
11
  #
@@ -40,7 +43,7 @@ RSpec.shared_context 'OpenStack specs with VCR' do
40
43
  Fog.interval = 0
41
44
  # use an auth URL that matches our VCR recordings (IdentityV2 for most
42
45
  # services, but IdentityV3 test obviously needs IdentityV3 auth URL)
43
- if [Fog::Identity::OpenStack::V3, Fog::Network::OpenStack].include? @service_class
46
+ if [Fog::Identity::OpenStack::V3, Fog::Image::OpenStack, Fog::Image::OpenStack::V1, Fog::Network::OpenStack].include? @service_class
44
47
  @os_auth_url = 'http://devstack.openstack.stack:5000/v3'
45
48
  else
46
49
  @os_auth_url = 'http://devstack.openstack.stack:5000/v2.0'
@@ -73,19 +76,20 @@ RSpec.shared_context 'OpenStack specs with VCR' do
73
76
  if @service_class == Fog::Identity::OpenStack::V3 || @os_auth_url.end_with?('/v3')
74
77
  options = {
75
78
  :openstack_auth_url => "#{@os_auth_url}/auth/tokens",
76
- :openstack_region => ENV['OS_REGION_NAME'] || 'RegionOne',
77
- :openstack_api_key => ENV['OS_PASSWORD'] || 'password',
78
- :openstack_username => ENV['OS_USERNAME'] || 'admin',
79
- :openstack_domain_name => ENV['OS_USER_DOMAIN_NAME'] || 'Default',
80
- :openstack_project_name => ENV['OS_PROJECT_NAME'] || 'admin'
79
+ :openstack_region => ENV['OS_REGION_NAME'] || options[:region_name] || 'RegionOne',
80
+ :openstack_api_key => ENV['OS_PASSWORD'] || options[:password] || 'password',
81
+ :openstack_username => ENV['OS_USERNAME'] || options[:username] || 'admin',
82
+ :openstack_domain_name => ENV['OS_USER_DOMAIN_NAME']|| options[:domain_name] || 'Default',
83
+ :openstack_project_name => ENV['OS_PROJECT_NAME']|| options[:project_name] || 'admin'
81
84
  }
85
+ options[:openstack_service_type] = [ENV['OS_AUTH_SERVICE']] if ENV['OS_AUTH_SERVICE']
82
86
  else
83
87
  options = {
84
88
  :openstack_auth_url => "#{@os_auth_url}/tokens",
85
- :openstack_region => ENV['OS_REGION_NAME'] || 'RegionOne',
86
- :openstack_api_key => ENV['OS_PASSWORD'] || 'devstack',
87
- :openstack_username => ENV['OS_USERNAME'] || 'admin',
88
- :openstack_tenant => ENV['OS_PROJECT_NAME'] || 'admin'
89
+ :openstack_region => ENV['OS_REGION_NAME'] || options[:region_name] || 'RegionOne',
90
+ :openstack_api_key => ENV['OS_PASSWORD'] || options[:password] || 'devstack',
91
+ :openstack_username => ENV['OS_USERNAME'] || options[:username] || 'admin',
92
+ :openstack_tenant => ENV['OS_PROJECT_NAME'] || options[:project_name] || 'admin'
89
93
  # FIXME: Identity V3 not properly supported by other services yet
90
94
  # :openstack_user_domain => ENV['OS_USER_DOMAIN_NAME'] || 'Default',
91
95
  # :openstack_project_domain => ENV['OS_PROJECT_DOMAIN_NAME'] || 'Default',
@@ -109,9 +109,6 @@ def compute_providers
109
109
  :name => "fog_#{Time.now.to_i}"
110
110
  },
111
111
  :mocked => true
112
- },
113
- :xenserver => {
114
- :mocked => false
115
112
  }
116
113
  }
117
114
  end
@@ -0,0 +1,25 @@
1
+ Shindo.tests('Fog::Compute::DigitalOceanV2 | list_flavors request', ['digitalocean', 'compute']) do
2
+ service = Fog::Compute.new(:provider => 'DigitalOcean', :version => 'V2')
3
+
4
+ size_format = {
5
+ 'slug' => String,
6
+ 'memory' => Integer,
7
+ 'vcpus' => Integer,
8
+ 'disk' => Integer,
9
+ 'transfer' => Float,
10
+ 'price_monthly' => Float,
11
+ 'price_hourly' => Float,
12
+ 'regions' => Array,
13
+ 'available' => Fog::Boolean,
14
+ }
15
+
16
+ tests('success') do
17
+ tests('#list_flavors') do
18
+ service.list_flavors.body['sizes'].each do |size|
19
+ tests('format').data_matches_schema(size_format) do
20
+ size
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ Shindo.tests('Fog::Compute::DigitalOceanV2 | list_images request', ['digitalocean', 'compute']) do
2
+ service = Fog::Compute.new(:provider => 'DigitalOcean', :version => 'V2')
3
+
4
+ image_format = {
5
+ 'id' => Integer,
6
+ 'name' => String,
7
+ 'type' => String,
8
+ 'distribution' => String,
9
+ 'slug' => Fog::Nullable::String,
10
+ 'public' => Fog::Boolean,
11
+ 'regions' => Array,
12
+ 'min_disk_size' => Fog::Nullable::Integer,
13
+ 'created_at' => String,
14
+ }
15
+
16
+ tests('success') do
17
+ tests('#list_images') do
18
+ service.list_images.body['images'].each do |image|
19
+ tests('format').data_matches_schema(image_format) do
20
+ image
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end