fog 1.30.0 → 1.31.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 (252) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +39 -0
  3. data/CONTRIBUTORS.md +73 -1
  4. data/LICENSE.md +1 -1
  5. data/Rakefile +10 -8
  6. data/fog.gemspec +6 -3
  7. data/lib/fog/cloudstack/models/compute/server.rb +2 -0
  8. data/lib/fog/openstack.rb +1 -1
  9. data/lib/fog/openstack/baremetal.rb +5 -5
  10. data/lib/fog/openstack/compute.rb +20 -9
  11. data/lib/fog/openstack/core.rb +53 -14
  12. data/lib/fog/openstack/examples/compute/basics.rb +3 -1
  13. data/lib/fog/openstack/identity.rb +29 -254
  14. data/lib/fog/openstack/identity_v2.rb +264 -0
  15. data/lib/fog/openstack/identity_v3.rb +249 -0
  16. data/lib/fog/openstack/image.rb +1 -1
  17. data/lib/fog/openstack/metering.rb +1 -1
  18. data/lib/fog/openstack/models/baremetal/node.rb +22 -0
  19. data/lib/fog/openstack/models/compute/flavor.rb +13 -0
  20. data/lib/fog/openstack/models/compute/service.rb +48 -0
  21. data/lib/fog/openstack/models/compute/services.rb +20 -0
  22. data/lib/fog/openstack/models/identity_v2/ec2_credential.rb +45 -0
  23. data/lib/fog/openstack/models/identity_v2/ec2_credentials.rb +55 -0
  24. data/lib/fog/openstack/models/identity_v2/role.rb +52 -0
  25. data/lib/fog/openstack/models/identity_v2/roles.rb +22 -0
  26. data/lib/fog/openstack/models/identity_v2/tenant.rb +64 -0
  27. data/lib/fog/openstack/models/identity_v2/tenants.rb +31 -0
  28. data/lib/fog/openstack/models/identity_v2/user.rb +71 -0
  29. data/lib/fog/openstack/models/identity_v2/users.rb +43 -0
  30. data/lib/fog/openstack/models/identity_v3/domain.rb +47 -0
  31. data/lib/fog/openstack/models/identity_v3/domains.rb +36 -0
  32. data/lib/fog/openstack/models/identity_v3/endpoint.rb +50 -0
  33. data/lib/fog/openstack/models/identity_v3/endpoints.rb +27 -0
  34. data/lib/fog/openstack/models/identity_v3/group.rb +96 -0
  35. data/lib/fog/openstack/models/identity_v3/groups.rb +31 -0
  36. data/lib/fog/openstack/models/identity_v3/os_credential.rb +73 -0
  37. data/lib/fog/openstack/models/identity_v3/os_credentials.rb +31 -0
  38. data/lib/fog/openstack/models/identity_v3/policies.rb +31 -0
  39. data/lib/fog/openstack/models/identity_v3/policy.rb +46 -0
  40. data/lib/fog/openstack/models/identity_v3/project.rb +98 -0
  41. data/lib/fog/openstack/models/identity_v3/projects.rb +31 -0
  42. data/lib/fog/openstack/models/identity_v3/role.rb +45 -0
  43. data/lib/fog/openstack/models/identity_v3/role_assignment.rb +22 -0
  44. data/lib/fog/openstack/models/identity_v3/role_assignments.rb +22 -0
  45. data/lib/fog/openstack/models/identity_v3/roles.rb +35 -0
  46. data/lib/fog/openstack/models/identity_v3/service.rb +47 -0
  47. data/lib/fog/openstack/models/identity_v3/services.rb +31 -0
  48. data/lib/fog/openstack/models/identity_v3/token.rb +26 -0
  49. data/lib/fog/openstack/models/identity_v3/tokens.rb +40 -0
  50. data/lib/fog/openstack/models/identity_v3/user.rb +87 -0
  51. data/lib/fog/openstack/models/identity_v3/users.rb +35 -0
  52. data/lib/fog/openstack/network.rb +2 -9
  53. data/lib/fog/openstack/orchestration.rb +1 -6
  54. data/lib/fog/openstack/planning.rb +1 -1
  55. data/lib/fog/openstack/requests/baremetal/set_node_maintenance.rb +36 -0
  56. data/lib/fog/openstack/requests/baremetal/set_node_power_state.rb +35 -0
  57. data/lib/fog/openstack/requests/baremetal/set_node_provision_state.rb +38 -0
  58. data/lib/fog/openstack/requests/baremetal/unset_node_maintenance.rb +36 -0
  59. data/lib/fog/openstack/requests/compute/create_flavor_metadata.rb +38 -0
  60. data/lib/fog/openstack/requests/compute/create_security_group.rb +1 -1
  61. data/lib/fog/openstack/requests/compute/delete_service.rb +32 -0
  62. data/lib/fog/openstack/requests/compute/disable_service.rb +37 -0
  63. data/lib/fog/openstack/requests/compute/disable_service_log_reason.rb +38 -0
  64. data/lib/fog/openstack/requests/compute/enable_service.rb +38 -0
  65. data/lib/fog/openstack/requests/compute/get_flavor_metadata.rb +27 -0
  66. data/lib/fog/openstack/requests/compute/list_services.rb +72 -0
  67. data/lib/fog/openstack/requests/compute/list_tenants_with_flavor_access.rb +1 -1
  68. data/lib/fog/openstack/requests/compute/list_zones.rb +32 -0
  69. data/lib/fog/openstack/requests/identity_v2/add_user_to_tenant.rb +36 -0
  70. data/lib/fog/openstack/requests/identity_v2/check_token.rb +22 -0
  71. data/lib/fog/openstack/requests/identity_v2/create_ec2_credential.rb +59 -0
  72. data/lib/fog/openstack/requests/identity_v2/create_role.rb +38 -0
  73. data/lib/fog/openstack/requests/identity_v2/create_tenant.rb +34 -0
  74. data/lib/fog/openstack/requests/identity_v2/create_user.rb +45 -0
  75. data/lib/fog/openstack/requests/identity_v2/create_user_role.rb +26 -0
  76. data/lib/fog/openstack/requests/identity_v2/delete_ec2_credential.rb +43 -0
  77. data/lib/fog/openstack/requests/identity_v2/delete_role.rb +30 -0
  78. data/lib/fog/openstack/requests/identity_v2/delete_tenant.rb +33 -0
  79. data/lib/fog/openstack/requests/identity_v2/delete_user.rb +30 -0
  80. data/lib/fog/openstack/requests/identity_v2/delete_user_role.rb +25 -0
  81. data/lib/fog/openstack/requests/identity_v2/get_ec2_credential.rb +50 -0
  82. data/lib/fog/openstack/requests/identity_v2/get_role.rb +30 -0
  83. data/lib/fog/openstack/requests/identity_v2/get_tenant.rb +33 -0
  84. data/lib/fog/openstack/requests/identity_v2/get_tenants_by_id.rb +20 -0
  85. data/lib/fog/openstack/requests/identity_v2/get_tenants_by_name.rb +20 -0
  86. data/lib/fog/openstack/requests/identity_v2/get_user_by_id.rb +34 -0
  87. data/lib/fog/openstack/requests/identity_v2/get_user_by_name.rb +29 -0
  88. data/lib/fog/openstack/requests/identity_v2/list_ec2_credentials.rb +45 -0
  89. data/lib/fog/openstack/requests/identity_v2/list_endpoints_for_token.rb +20 -0
  90. data/lib/fog/openstack/requests/identity_v2/list_roles.rb +33 -0
  91. data/lib/fog/openstack/requests/identity_v2/list_roles_for_user_on_tenant.rb +32 -0
  92. data/lib/fog/openstack/requests/identity_v2/list_tenants.rb +47 -0
  93. data/lib/fog/openstack/requests/identity_v2/list_user_global_roles.rb +20 -0
  94. data/lib/fog/openstack/requests/identity_v2/list_users.rb +35 -0
  95. data/lib/fog/openstack/requests/identity_v2/remove_user_from_tenant.rb +22 -0
  96. data/lib/fog/openstack/requests/identity_v2/set_tenant.rb +21 -0
  97. data/lib/fog/openstack/requests/identity_v2/update_tenant.rb +30 -0
  98. data/lib/fog/openstack/requests/identity_v2/update_user.rb +34 -0
  99. data/lib/fog/openstack/requests/identity_v2/validate_token.rb +22 -0
  100. data/lib/fog/openstack/requests/identity_v3/add_user_to_group.rb +20 -0
  101. data/lib/fog/openstack/requests/identity_v3/auth_domains.rb +29 -0
  102. data/lib/fog/openstack/requests/identity_v3/auth_projects.rb +29 -0
  103. data/lib/fog/openstack/requests/identity_v3/check_domain_group_role.rb +20 -0
  104. data/lib/fog/openstack/requests/identity_v3/check_domain_user_role.rb +20 -0
  105. data/lib/fog/openstack/requests/identity_v3/check_project_group_role.rb +20 -0
  106. data/lib/fog/openstack/requests/identity_v3/check_project_user_role.rb +20 -0
  107. data/lib/fog/openstack/requests/identity_v3/create_domain.rb +21 -0
  108. data/lib/fog/openstack/requests/identity_v3/create_endpoint.rb +21 -0
  109. data/lib/fog/openstack/requests/identity_v3/create_group.rb +21 -0
  110. data/lib/fog/openstack/requests/identity_v3/create_os_credential.rb +21 -0
  111. data/lib/fog/openstack/requests/identity_v3/create_policy.rb +21 -0
  112. data/lib/fog/openstack/requests/identity_v3/create_project.rb +21 -0
  113. data/lib/fog/openstack/requests/identity_v3/create_role.rb +21 -0
  114. data/lib/fog/openstack/requests/identity_v3/create_service.rb +21 -0
  115. data/lib/fog/openstack/requests/identity_v3/create_user.rb +21 -0
  116. data/lib/fog/openstack/requests/identity_v3/delete_domain.rb +20 -0
  117. data/lib/fog/openstack/requests/identity_v3/delete_endpoint.rb +20 -0
  118. data/lib/fog/openstack/requests/identity_v3/delete_group.rb +20 -0
  119. data/lib/fog/openstack/requests/identity_v3/delete_os_credential.rb +20 -0
  120. data/lib/fog/openstack/requests/identity_v3/delete_policy.rb +20 -0
  121. data/lib/fog/openstack/requests/identity_v3/delete_project.rb +20 -0
  122. data/lib/fog/openstack/requests/identity_v3/delete_role.rb +20 -0
  123. data/lib/fog/openstack/requests/identity_v3/delete_service.rb +20 -0
  124. data/lib/fog/openstack/requests/identity_v3/delete_user.rb +20 -0
  125. data/lib/fog/openstack/requests/identity_v3/get_domain.rb +23 -0
  126. data/lib/fog/openstack/requests/identity_v3/get_endpoint.rb +23 -0
  127. data/lib/fog/openstack/requests/identity_v3/get_group.rb +23 -0
  128. data/lib/fog/openstack/requests/identity_v3/get_os_credential.rb +23 -0
  129. data/lib/fog/openstack/requests/identity_v3/get_policy.rb +23 -0
  130. data/lib/fog/openstack/requests/identity_v3/get_project.rb +23 -0
  131. data/lib/fog/openstack/requests/identity_v3/get_role.rb +23 -0
  132. data/lib/fog/openstack/requests/identity_v3/get_service.rb +23 -0
  133. data/lib/fog/openstack/requests/identity_v3/get_user.rb +23 -0
  134. data/lib/fog/openstack/requests/identity_v3/grant_domain_group_role.rb +20 -0
  135. data/lib/fog/openstack/requests/identity_v3/grant_domain_user_role.rb +20 -0
  136. data/lib/fog/openstack/requests/identity_v3/grant_project_group_role.rb +20 -0
  137. data/lib/fog/openstack/requests/identity_v3/grant_project_user_role.rb +20 -0
  138. data/lib/fog/openstack/requests/identity_v3/group_user_check.rb +20 -0
  139. data/lib/fog/openstack/requests/identity_v3/list_domain_group_roles.rb +23 -0
  140. data/lib/fog/openstack/requests/identity_v3/list_domain_user_roles.rb +23 -0
  141. data/lib/fog/openstack/requests/identity_v3/list_domains.rb +31 -0
  142. data/lib/fog/openstack/requests/identity_v3/list_endpoints.rb +31 -0
  143. data/lib/fog/openstack/requests/identity_v3/list_group_users.rb +32 -0
  144. data/lib/fog/openstack/requests/identity_v3/list_groups.rb +42 -0
  145. data/lib/fog/openstack/requests/identity_v3/list_os_credentials.rb +29 -0
  146. data/lib/fog/openstack/requests/identity_v3/list_policies.rb +28 -0
  147. data/lib/fog/openstack/requests/identity_v3/list_project_group_roles.rb +23 -0
  148. data/lib/fog/openstack/requests/identity_v3/list_project_user_roles.rb +23 -0
  149. data/lib/fog/openstack/requests/identity_v3/list_projects.rb +42 -0
  150. data/lib/fog/openstack/requests/identity_v3/list_role_assignments.rb +35 -0
  151. data/lib/fog/openstack/requests/identity_v3/list_roles.rb +42 -0
  152. data/lib/fog/openstack/requests/identity_v3/list_services.rb +30 -0
  153. data/lib/fog/openstack/requests/identity_v3/list_user_groups.rb +23 -0
  154. data/lib/fog/openstack/requests/identity_v3/list_user_projects.rb +23 -0
  155. data/lib/fog/openstack/requests/identity_v3/list_users.rb +32 -0
  156. data/lib/fog/openstack/requests/identity_v3/remove_user_from_group.rb +20 -0
  157. data/lib/fog/openstack/requests/identity_v3/revoke_domain_group_role.rb +20 -0
  158. data/lib/fog/openstack/requests/identity_v3/revoke_domain_user_role.rb +20 -0
  159. data/lib/fog/openstack/requests/identity_v3/revoke_project_group_role.rb +20 -0
  160. data/lib/fog/openstack/requests/identity_v3/revoke_project_user_role.rb +20 -0
  161. data/lib/fog/openstack/requests/identity_v3/token_authenticate.rb +21 -0
  162. data/lib/fog/openstack/requests/identity_v3/token_check.rb +21 -0
  163. data/lib/fog/openstack/requests/identity_v3/token_revoke.rb +21 -0
  164. data/lib/fog/openstack/requests/identity_v3/token_validate.rb +22 -0
  165. data/lib/fog/openstack/requests/identity_v3/update_domain.rb +21 -0
  166. data/lib/fog/openstack/requests/identity_v3/update_endpoint.rb +21 -0
  167. data/lib/fog/openstack/requests/identity_v3/update_group.rb +21 -0
  168. data/lib/fog/openstack/requests/identity_v3/update_os_credential.rb +21 -0
  169. data/lib/fog/openstack/requests/identity_v3/update_policy.rb +21 -0
  170. data/lib/fog/openstack/requests/identity_v3/update_project.rb +21 -0
  171. data/lib/fog/openstack/requests/identity_v3/update_role.rb +21 -0
  172. data/lib/fog/openstack/requests/identity_v3/update_service.rb +21 -0
  173. data/lib/fog/openstack/requests/identity_v3/update_user.rb +21 -0
  174. data/lib/fog/openstack/requests/image/list_public_images_detailed.rb +1 -1
  175. data/lib/fog/openstack/volume.rb +1 -1
  176. data/lib/fog/version.rb +1 -1
  177. data/lib/fog/vsphere/requests/compute/cloudinit_to_customspec.rb +27 -8
  178. data/lib/fog/vsphere/requests/compute/vm_clone.rb +376 -37
  179. data/lib/tasks/changelog_task.rb +1 -1
  180. data/spec/fog/openstack/identity_v3/authv3_a.yml +61 -0
  181. data/spec/fog/openstack/identity_v3/authv3_b.yml +61 -0
  182. data/spec/fog/openstack/identity_v3/authv3_c.yml +61 -0
  183. data/spec/fog/openstack/identity_v3/authv3_project.yml +61 -0
  184. data/spec/fog/openstack/identity_v3/authv3_token.yml +151 -0
  185. data/spec/fog/openstack/identity_v3/authv3_unscoped.yml +334 -0
  186. data/spec/fog/openstack/identity_v3/idv2_unscoped_token_v3.yml +467 -0
  187. data/spec/fog/openstack/identity_v3/idv3.yml +61 -0
  188. data/spec/fog/openstack/identity_v3/idv3_credential.yml +111 -0
  189. data/spec/fog/openstack/identity_v3/idv3_credential_crud.yml +528 -0
  190. data/spec/fog/openstack/identity_v3/idv3_domain.yml +195 -0
  191. data/spec/fog/openstack/identity_v3/idv3_domain_crud.yml +686 -0
  192. data/spec/fog/openstack/identity_v3/idv3_domain_group_roles_mutation.yml +906 -0
  193. data/spec/fog/openstack/identity_v3/idv3_domain_roles_mutation.yml +505 -0
  194. data/spec/fog/openstack/identity_v3/idv3_endpoint.yml +303 -0
  195. data/spec/fog/openstack/identity_v3/idv3_endpoints_crud.yml +718 -0
  196. data/spec/fog/openstack/identity_v3/idv3_group_crud_mutation.yml +975 -0
  197. data/spec/fog/openstack/identity_v3/idv3_policy.yml +147 -0
  198. data/spec/fog/openstack/identity_v3/idv3_policy_crud.yml +368 -0
  199. data/spec/fog/openstack/identity_v3/idv3_project.yml +211 -0
  200. data/spec/fog/openstack/identity_v3/idv3_project_crud.yml +663 -0
  201. data/spec/fog/openstack/identity_v3/idv3_project_group_user_roles_mutation.yml +1378 -0
  202. data/spec/fog/openstack/identity_v3/idv3_role.yml +199 -0
  203. data/spec/fog/openstack/identity_v3/idv3_role_crud.yml +616 -0
  204. data/spec/fog/openstack/identity_v3/idv3_service.yml +223 -0
  205. data/spec/fog/openstack/identity_v3/idv3_services_crud.yml +562 -0
  206. data/spec/fog/openstack/identity_v3/idv3_token.yml +240 -0
  207. data/spec/fog/openstack/identity_v3/idv3_user_crud.yml +572 -0
  208. data/spec/fog/openstack/identity_v3/idv3_users.yml +393 -0
  209. data/spec/fog/openstack/identity_v3_spec.rb +929 -0
  210. data/tests/openstack/requests/baremetal/node_tests.rb +18 -0
  211. data/tests/openstack/requests/compute/flavor_tests.rb +18 -0
  212. data/tests/openstack/requests/compute/service_tests.rb +33 -0
  213. metadata +259 -49
  214. data/lib/fog/openstack/models/identity/ec2_credential.rb +0 -44
  215. data/lib/fog/openstack/models/identity/ec2_credentials.rb +0 -53
  216. data/lib/fog/openstack/models/identity/role.rb +0 -50
  217. data/lib/fog/openstack/models/identity/roles.rb +0 -20
  218. data/lib/fog/openstack/models/identity/tenant.rb +0 -62
  219. data/lib/fog/openstack/models/identity/tenants.rb +0 -29
  220. data/lib/fog/openstack/models/identity/user.rb +0 -69
  221. data/lib/fog/openstack/models/identity/users.rb +0 -41
  222. data/lib/fog/openstack/requests/identity/add_user_to_tenant.rb +0 -34
  223. data/lib/fog/openstack/requests/identity/check_token.rb +0 -20
  224. data/lib/fog/openstack/requests/identity/create_ec2_credential.rb +0 -57
  225. data/lib/fog/openstack/requests/identity/create_role.rb +0 -36
  226. data/lib/fog/openstack/requests/identity/create_tenant.rb +0 -32
  227. data/lib/fog/openstack/requests/identity/create_user.rb +0 -43
  228. data/lib/fog/openstack/requests/identity/create_user_role.rb +0 -24
  229. data/lib/fog/openstack/requests/identity/delete_ec2_credential.rb +0 -42
  230. data/lib/fog/openstack/requests/identity/delete_role.rb +0 -28
  231. data/lib/fog/openstack/requests/identity/delete_tenant.rb +0 -31
  232. data/lib/fog/openstack/requests/identity/delete_user.rb +0 -28
  233. data/lib/fog/openstack/requests/identity/delete_user_role.rb +0 -23
  234. data/lib/fog/openstack/requests/identity/get_ec2_credential.rb +0 -48
  235. data/lib/fog/openstack/requests/identity/get_role.rb +0 -28
  236. data/lib/fog/openstack/requests/identity/get_tenant.rb +0 -31
  237. data/lib/fog/openstack/requests/identity/get_tenants_by_id.rb +0 -18
  238. data/lib/fog/openstack/requests/identity/get_tenants_by_name.rb +0 -18
  239. data/lib/fog/openstack/requests/identity/get_user_by_id.rb +0 -32
  240. data/lib/fog/openstack/requests/identity/get_user_by_name.rb +0 -27
  241. data/lib/fog/openstack/requests/identity/list_ec2_credentials.rb +0 -43
  242. data/lib/fog/openstack/requests/identity/list_endpoints_for_token.rb +0 -18
  243. data/lib/fog/openstack/requests/identity/list_roles.rb +0 -31
  244. data/lib/fog/openstack/requests/identity/list_roles_for_user_on_tenant.rb +0 -30
  245. data/lib/fog/openstack/requests/identity/list_tenants.rb +0 -45
  246. data/lib/fog/openstack/requests/identity/list_user_global_roles.rb +0 -18
  247. data/lib/fog/openstack/requests/identity/list_users.rb +0 -33
  248. data/lib/fog/openstack/requests/identity/remove_user_from_tenant.rb +0 -20
  249. data/lib/fog/openstack/requests/identity/set_tenant.rb +0 -19
  250. data/lib/fog/openstack/requests/identity/update_tenant.rb +0 -28
  251. data/lib/fog/openstack/requests/identity/update_user.rb +0 -32
  252. data/lib/fog/openstack/requests/identity/validate_token.rb +0 -20
data/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2009-2014 [CONTRIBUTORS.md](https://github.com/fog/fog/blob/master/CONTRIBUTORS.md)
3
+ Copyright (c) 2009-2015 [CONTRIBUTORS.md](https://github.com/fog/fog/blob/master/CONTRIBUTORS.md)
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of
6
6
  this software and associated documentation files (the "Software"), to deal in
data/Rakefile CHANGED
@@ -6,6 +6,12 @@ require 'rubygems/package_task'
6
6
  require 'yard'
7
7
  require File.dirname(__FILE__) + '/lib/fog'
8
8
 
9
+ require "tasks/changelog_task"
10
+ Fog::Rake::ChangelogTask.new
11
+
12
+ require "tasks/github_release_task"
13
+ Fog::Rake::GithubReleaseTask.new
14
+
9
15
  #############################################################################
10
16
  #
11
17
  # Helper functions
@@ -72,6 +78,9 @@ namespace :test do
72
78
  task :openstack do
73
79
  sh("export FOG_MOCK=#{mock} && bundle exec shindont tests/openstack")
74
80
  end
81
+ task :openstack_idv3 do
82
+ sh("export FOG_MOCK=#{mock} && bundle exec rspec spec/fog/openstack/identity_v3_spec.rb")
83
+ end
75
84
  task :cloudstack do
76
85
  sh("export FOG_MOCK=#{mock} && bundle exec shindont tests/cloudstack")
77
86
  end
@@ -160,12 +169,11 @@ end
160
169
 
161
170
  task :git_mark_release do
162
171
  sh "git commit --allow-empty -a -m 'Release #{version}'"
163
- sh "git tag v#{version}"
164
172
  end
165
173
 
166
174
  task :git_push_release do
167
175
  sh "git push origin master"
168
- sh "git push origin v#{version}"
176
+ ::Rake::Task[:github_release].invoke
169
177
  end
170
178
 
171
179
  task :gem_push do
@@ -215,9 +223,3 @@ YARD::Rake::YardocTask.new do |t|
215
223
  t.files = ['lib/**/*.rb', "README"]
216
224
  t.options = ["--output-dir", YARDOC_LOCATION, "--title", "#{name} #{version}"]
217
225
  end
218
-
219
- require "tasks/changelog_task"
220
- Fog::Rake::ChangelogTask.new
221
-
222
- require "tasks/github_release_task"
223
- Fog::Rake::GithubReleaseTask.new
data/fog.gemspec CHANGED
@@ -11,8 +11,8 @@ Gem::Specification.new do |s|
11
11
  ## If your rubyforge_project name is different, then edit it and comment out
12
12
  ## the sub! line in the Rakefile
13
13
  s.name = "fog"
14
- s.version = "1.30.0"
15
- s.date = "2015-05-07"
14
+ s.version = "1.31.0"
15
+ s.date = "2015-06-04"
16
16
  s.rubyforge_project = "fog"
17
17
 
18
18
  ## Make sure your summary is short. The description may be as long
@@ -44,7 +44,7 @@ Gem::Specification.new do |s|
44
44
  s.rdoc_options = ["--charset=UTF-8"]
45
45
  s.extra_rdoc_files = %w[README.md]
46
46
 
47
- s.add_dependency("fog-core", "~> 1.27", ">= 1.27.4")
47
+ s.add_dependency("fog-core", "~> 1.30")
48
48
  s.add_dependency("fog-json")
49
49
  s.add_dependency("fog-xml", "~> 0.1.1")
50
50
 
@@ -84,6 +84,9 @@ Gem::Specification.new do |s|
84
84
  s.add_development_dependency("simplecov")
85
85
  s.add_development_dependency("thor")
86
86
  s.add_development_dependency("yard")
87
+ s.add_development_dependency("rspec-core")
88
+ s.add_development_dependency("vcr")
89
+ s.add_development_dependency("webmock")
87
90
 
88
91
  s.files = `git ls-files`.split("\n")
89
92
  s.test_files = `git ls-files -- {spec,tests}/*`.split("\n")
@@ -39,6 +39,7 @@ module Fog
39
39
  attribute :security_group_list, :type => :array, :aliases => 'securitygroup'
40
40
  attribute :nics, :type => :array, :aliases => 'nic'
41
41
  attribute :job_id, :aliases => 'jobid' # only on create
42
+ attribute :size, :type => :integer
42
43
 
43
44
  attr_accessor :network_ids, :disk_offering_id, :ip_address, :ip_to_network_list
44
45
  attr_writer :security_group_ids
@@ -128,6 +129,7 @@ module Fog
128
129
  'projectid' => project_id,
129
130
  'keypair' => key_name,
130
131
  'userdata' => user_data,
132
+ 'size' => size,
131
133
  }
132
134
 
133
135
  options.merge!('networkids' => network_ids) if network_ids
data/lib/fog/openstack.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'fog/openstack/compute'
2
- require 'fog/openstack/identity'
2
+ require 'fog/openstack/identity_v2'
3
3
  require 'fog/openstack/image'
4
4
  require 'fog/openstack/metering'
5
5
  require 'fog/openstack/network'
@@ -34,6 +34,10 @@ module Fog
34
34
  request :list_nodes
35
35
  request :list_nodes_detailed
36
36
  request :patch_node
37
+ request :set_node_power_state
38
+ request :set_node_provision_state
39
+ request :set_node_maintenance
40
+ request :unset_node_maintenance
37
41
 
38
42
  # Chassis requests
39
43
  request :create_chassis
@@ -63,14 +67,10 @@ module Fog
63
67
 
64
68
  ## Node requests
65
69
  # request :validate_node
66
- # request :set_maintenance
67
- # request :unset_maintenance
68
70
  # request :get_boot_device
69
71
  # request :set_boot_device
70
72
  # request :list_supported_boot_devices
71
73
  # request :list_node_states
72
- # request :set_power_state
73
- # request :provision_node
74
74
  # request :get_console_info
75
75
  # request :change_console_state
76
76
  # request :get_vendor_passthru_methods
@@ -337,7 +337,7 @@ module Fog
337
337
  :openstack_endpoint_type => @openstack_endpoint_type
338
338
  }
339
339
 
340
- credentials = Fog::OpenStack.authenticate_v2(options, @connection_options)
340
+ credentials = Fog::OpenStack.authenticate(options, @connection_options)
341
341
 
342
342
  @current_user = credentials[:user]
343
343
  @current_tenant = credentials[:tenant]
@@ -10,6 +10,7 @@ module Fog
10
10
  :openstack_api_key, :openstack_username, :openstack_identity_endpoint,
11
11
  :current_user, :current_tenant, :openstack_region,
12
12
  :openstack_endpoint_type,
13
+ :openstack_project_name,
13
14
  :openstack_project_domain, :openstack_user_domain
14
15
 
15
16
  ## MODELS
@@ -17,6 +18,8 @@ module Fog
17
18
  model_path 'fog/openstack/models/compute'
18
19
  model :server
19
20
  collection :servers
21
+ model :service
22
+ collection :services
20
23
  model :image
21
24
  collection :images
22
25
  model :flavor
@@ -84,6 +87,13 @@ module Fog
84
87
  request :live_migrate_server
85
88
  request :migrate_server
86
89
 
90
+ # Service CRUD
91
+ request :list_services
92
+ request :enable_service
93
+ request :disable_service
94
+ request :disable_service_log_reason
95
+ request :delete_service
96
+
87
97
  # Image CRUD
88
98
  request :list_images
89
99
  request :list_images_detail
@@ -98,6 +108,10 @@ module Fog
98
108
  request :create_flavor
99
109
  request :delete_flavor
100
110
 
111
+ # Flavor Actions
112
+ request :get_flavor_metadata
113
+ request :create_flavor_metadata
114
+
101
115
  # Flavor Access
102
116
  request :add_flavor_access
103
117
  request :remove_flavor_access
@@ -175,6 +189,9 @@ module Fog
175
189
  request :list_hosts
176
190
  request :get_host_details
177
191
 
192
+ # Zones
193
+ request :list_zones
194
+
178
195
  class Mock
179
196
  attr_reader :auth_token
180
197
  attr_reader :auth_token_expiration
@@ -363,7 +380,7 @@ module Fog
363
380
  'Accept' => 'application/json',
364
381
  'X-Auth-Token' => @auth_token
365
382
  }.merge!(params[:headers] || {}),
366
- :path => "#{@path}/#{@tenant_id}/#{params[:path]}",
383
+ :path => "#{@path}/#{params[:path]}",
367
384
  :query => params[:query]
368
385
  }))
369
386
  rescue Excon::Errors::Unauthorized => error
@@ -410,13 +427,7 @@ module Fog
410
427
  :openstack_endpoint_type => @openstack_endpoint_type
411
428
  }
412
429
 
413
- if @openstack_auth_uri.path =~ /\/v2.0/
414
- credentials = Fog::OpenStack.authenticate_v2(options, @connection_options)
415
- elsif @openstack_auth_uri.path =~ /\/v3/
416
- credentials = Fog::OpenStack.authenticate_v3(options, @connection_options)
417
- else
418
- credentials = Fog::OpenStack.authenticate_v1(options, @connection_options)
419
- end
430
+ credentials = Fog::OpenStack.authenticate(options, @connection_options)
420
431
 
421
432
  @current_user = credentials[:user]
422
433
  @current_tenant = credentials[:tenant]
@@ -430,7 +441,7 @@ module Fog
430
441
 
431
442
  uri = URI.parse(@openstack_management_url)
432
443
  @host = uri.host
433
- @path, @tenant_id = uri.path.scan(/(\/.*)\/(.*)/).flatten
444
+ @path = uri.path
434
445
 
435
446
  @path.sub!(/\/$/, '')
436
447
  unless @path.match(/1\.1|v2/)
@@ -177,10 +177,11 @@ module Fog
177
177
  def self.authenticate_v3(options, connection_options = {})
178
178
  uri = options[:openstack_auth_uri]
179
179
  tenant_name = options[:openstack_tenant]
180
+ project_name = options[:openstack_project_name]
180
181
  service_type = options[:openstack_service_type]
181
182
  service_name = options[:openstack_service_name]
182
183
  identity_service_type = options[:openstack_identity_service_type]
183
- endpoint_type = (options[:openstack_endpoint_type] || 'public').to_s
184
+ endpoint_type = map_endpoint_type(options[:openstack_endpoint_type] || 'publicURL')
184
185
  openstack_region = options[:openstack_region]
185
186
 
186
187
  body, token_headers = retrieve_tokens_v3(options, connection_options)
@@ -190,6 +191,29 @@ module Fog
190
191
  options[:unscoped_token] = token_headers['X-Subject-Token']
191
192
 
192
193
  unless service
194
+ unless project_name
195
+ request_body = {
196
+ :expects => [200],
197
+ :headers => {'Content-Type' => 'application/json',
198
+ 'Accept' => 'application/json',
199
+ 'X-Auth-Token' => token_headers['X-Subject-Token']},
200
+ :method => 'GET'
201
+ }
202
+ user_id = body['token']['user']['id']
203
+ response = Fog::Core::Connection.new(
204
+ "#{uri.scheme}://#{uri.host}:#{uri.port}/v3/users/#{user_id}/projects", false, connection_options).request(request_body)
205
+
206
+ projects_body = Fog::JSON.decode(response.body)
207
+ if projects_body['projects'].empty?
208
+ raise Fog::Errors::NotFound.new('No Project Found')
209
+ else
210
+ options[:openstack_project_name] = projects_body['projects'].first['name']
211
+ options[:openstack_domain_name] = body['token']['user']['domain']['name']
212
+ end
213
+ end
214
+
215
+ tenant_name = options[:openstack_project_name]
216
+
193
217
  unless tenant_name
194
218
  response = Fog::Core::Connection.new(
195
219
  "#{uri.scheme}://#{uri.host}:#{uri.port}/v3/projects", false, connection_options).request({
@@ -211,8 +235,6 @@ module Fog
211
235
  service = get_service(body, service_type, service_name)
212
236
  end
213
237
 
214
- endpoint_type = 'public'
215
-
216
238
  service['endpoints'] = service['endpoints'].select do |endpoint|
217
239
  endpoint['region'] == openstack_region && endpoint['interface'] == endpoint_type
218
240
  end if openstack_region
@@ -238,13 +260,14 @@ module Fog
238
260
  admin = true if r["name"] == "admin"
239
261
  end
240
262
 
241
- if service['endpoints'].count > 1 and not admin
242
- regions = service["endpoints"].map{ |e| e['region'] }.uniq.join(',')
243
- raise Fog::Errors::NotFound.new("Multiple regions available choose one of these '#{regions}'")
263
+ regions = service["endpoints"].map{ |e| e['region'] }.uniq
264
+ if regions.count > 1 and not admin
265
+ raise Fog::Errors::NotFound.new("Multiple regions available choose one of these '#{regions.join(',')}'")
244
266
  end
245
267
 
246
268
  identity_service = get_service(body, identity_service_type) if identity_service_type
247
- tenant = body['token']['project']['name']
269
+ tenant = body['token']['project']['name'] if body['token']['project']
270
+ tenant = body['token']['user']['project']['name'] unless body['token']['project']
248
271
  user = body['token']['user']['name']
249
272
 
250
273
  management_url = service['endpoints'].find{|s| s["interface"][endpoint_type]}["url"]
@@ -326,7 +349,7 @@ module Fog
326
349
  end
327
350
  auth_token = options[:openstack_auth_token] || options[:unscoped_token]
328
351
  uri = options[:openstack_auth_uri]
329
- userdomain = options[:openstack_user_domain] || options[:openstack_domain]
352
+ userdomain = options[:openstack_user_domain] || options[:openstack_domain] || 'Default'
330
353
  project_domain = options[:openstack_project_domain] || options[:openstack_domain] || 'Default'
331
354
 
332
355
  connection = Fog::Core::Connection.new(uri.to_s, false, connection_options)
@@ -341,9 +364,6 @@ module Fog
341
364
  :methods => ["password"],
342
365
  :password => {
343
366
  :user => {
344
- :domain => {
345
- :name => userdomain
346
- },
347
367
  :name => username,
348
368
  :password => api_key
349
369
  }
@@ -358,13 +378,20 @@ module Fog
358
378
  else
359
379
  request_body[:auth][:scope] = {
360
380
  :project => {
361
- :domain => {
362
- :name => project_domain
363
- },
364
381
  :name => tenant_name
365
382
  }
366
383
  }
367
384
  end
385
+ unless userdomain.to_s.empty?
386
+ request_body[:auth][:identity][:password][:user][:domain] = {
387
+ :name => userdomain
388
+ }
389
+ end
390
+ unless project_domain.to_s.empty?
391
+ request_body[:auth][:scope][:project][:domain] = {
392
+ :name => project_domain
393
+ }
394
+ end
368
395
  end
369
396
 
370
397
  response = connection.request({
@@ -411,5 +438,17 @@ module Fog
411
438
  '%' + $1.unpack('H2' * $1.bytesize).join('%').upcase
412
439
  end
413
440
  end
441
+
442
+ def self.map_endpoint_type type
443
+ case type
444
+ when "publicURL"
445
+ "public"
446
+ when "internalURL"
447
+ "internal"
448
+ when "adminURL"
449
+ "admin"
450
+ end
451
+
452
+ end
414
453
  end
415
454
  end
@@ -17,7 +17,9 @@ compute_client ||= ::Fog::Compute.new(:provider => :openstack,
17
17
  # Options include metadata, availability zone, etc...
18
18
 
19
19
  begin
20
- vm = compute_client.servers.create(name, image, flavor, options = {})
20
+ vm = compute_client.servers.create(:name => 'lucky',
21
+ :image_ref => 'fcd8f8a9',
22
+ :flavor_ref => 4)
21
23
  rescue => e
22
24
  puts JSON.parse(e.response.body)['badRequest']['message']
23
25
  end
@@ -3,269 +3,41 @@ require 'fog/openstack/core'
3
3
  module Fog
4
4
  module Identity
5
5
  class OpenStack < Fog::Service
6
- requires :openstack_auth_url
7
- recognizes :openstack_auth_token, :openstack_management_url, :persistent,
8
- :openstack_service_type, :openstack_service_name, :openstack_tenant,
9
- :openstack_api_key, :openstack_username, :openstack_current_user_id,
10
- :current_user, :current_tenant,
11
- :openstack_endpoint_type, :openstack_region
12
6
 
13
- model_path 'fog/openstack/models/identity'
14
- model :tenant
15
- collection :tenants
16
- model :user
17
- collection :users
18
- model :role
19
- collection :roles
20
- model :ec2_credential
21
- collection :ec2_credentials
22
-
23
- request_path 'fog/openstack/requests/identity'
24
-
25
- request :check_token
26
- request :validate_token
27
-
28
- request :list_tenants
29
- request :create_tenant
30
- request :get_tenant
31
- request :get_tenants_by_id
32
- request :get_tenants_by_name
33
- request :update_tenant
34
- request :delete_tenant
35
-
36
- request :list_users
37
- request :create_user
38
- request :update_user
39
- request :delete_user
40
- request :get_user_by_id
41
- request :get_user_by_name
42
- request :add_user_to_tenant
43
- request :remove_user_from_tenant
44
-
45
- request :list_endpoints_for_token
46
- request :list_roles_for_user_on_tenant
47
- request :list_user_global_roles
48
-
49
- request :create_role
50
- request :delete_role
51
- request :delete_user_role
52
- request :create_user_role
53
- request :get_role
54
- request :list_roles
55
-
56
- request :set_tenant
57
-
58
- request :create_ec2_credential
59
- request :delete_ec2_credential
60
- request :get_ec2_credential
61
- request :list_ec2_credentials
62
-
63
- class Mock
64
- attr_reader :auth_token
65
- attr_reader :auth_token_expiration
66
- attr_reader :current_user
67
- attr_reader :current_tenant
68
- attr_reader :unscoped_token
69
-
70
- def self.data
71
- @users ||= {}
72
- @roles ||= {}
73
- @tenants ||= {}
74
- @ec2_credentials ||= Hash.new { |hash, key| hash[key] = {} }
75
- @user_tenant_membership ||= {}
76
-
77
- @data ||= Hash.new do |hash, key|
78
- hash[key] = {
79
- :users => @users,
80
- :roles => @roles,
81
- :tenants => @tenants,
82
- :ec2_credentials => @ec2_credentials,
83
- :user_tenant_membership => @user_tenant_membership
84
- }
85
- end
86
- end
87
-
88
- def self.reset!
89
- @data = nil
90
- @users = nil
91
- @roles = nil
92
- @tenants = nil
93
- @ec2_credentials = nil
94
- end
95
-
96
- def initialize(options={})
97
- @openstack_username = options[:openstack_username] || 'admin'
98
- @openstack_tenant = options[:openstack_tenant] || 'admin'
99
- @openstack_auth_uri = URI.parse(options[:openstack_auth_url])
100
- @openstack_management_url = @openstack_auth_uri.to_s
101
-
102
- @auth_token = Fog::Mock.random_base64(64)
103
- @auth_token_expiration = (Time.now.utc + 86400).iso8601
104
-
105
- @admin_tenant = self.data[:tenants].values.find do |u|
106
- u['name'] == 'admin'
107
- end
108
-
109
- if @openstack_tenant
110
- @current_tenant = self.data[:tenants].values.find do |u|
111
- u['name'] == @openstack_tenant
112
- end
113
-
114
- unless @current_tenant
115
- @current_tenant_id = Fog::Mock.random_hex(32)
116
- @current_tenant = self.data[:tenants][@current_tenant_id] = {
117
- 'id' => @current_tenant_id,
118
- 'name' => @openstack_tenant
119
- }
120
- else
121
- @current_tenant_id = @current_tenant['id']
7
+ # Fog::Identity::OpenStack.new() will return a Fog::Identity::OpenStack::V2 or a Fog::Identity::OpenStack::V3,
8
+ # depending on whether the auth URL is for an OpenStack Identity V2 or V3 API endpoint
9
+ def self.new(args = {})
10
+ if self.inspect == 'Fog::Identity::OpenStack'
11
+ if args[:openstack_auth_url]
12
+ @openstack_auth_uri = URI.parse(args[:openstack_auth_url])
13
+ if @openstack_auth_uri.path =~ /\/v3/
14
+ service = Fog::Identity::OpenStack::V3.new(args)
122
15
  end
123
- else
124
- @current_tenant = @admin_tenant
125
16
  end
126
-
127
- @current_user = self.data[:users].values.find do |u|
128
- u['name'] == @openstack_username
129
- end
130
- @current_tenant_id = Fog::Mock.random_hex(32)
131
-
132
- unless @current_user
133
- @current_user_id = Fog::Mock.random_hex(32)
134
- @current_user = self.data[:users][@current_user_id] = {
135
- 'id' => @current_user_id,
136
- 'name' => @openstack_username,
137
- 'email' => "#{@openstack_username}@mock.com",
138
- 'tenantId' => Fog::Mock.random_numbers(6).to_s,
139
- 'enabled' => true
140
- }
141
- else
142
- @current_user_id = @current_user['id']
143
- end
144
- end
145
-
146
- def data
147
- self.class.data[@openstack_username]
148
- end
149
-
150
- def reset_data
151
- self.class.data.delete(@openstack_username)
152
- end
153
-
154
- def credentials
155
- { :provider => 'openstack',
156
- :openstack_auth_url => @openstack_auth_uri.to_s,
157
- :openstack_auth_token => @auth_token,
158
- :openstack_management_url => @openstack_management_url,
159
- :openstack_current_user_id => @openstack_current_user_id,
160
- :current_user => @current_user,
161
- :current_tenant => @current_tenant}
17
+ service ||= Fog::Identity::OpenStack::V2.new(args)
18
+ else
19
+ service = Fog::Service.new(args)
162
20
  end
21
+ service
163
22
  end
164
23
 
165
- class Real
166
- attr_reader :current_user
167
- attr_reader :current_tenant
168
- attr_reader :unscoped_token
169
-
170
- def initialize(options={})
171
- @openstack_auth_token = options[:openstack_auth_token]
172
-
173
- unless @openstack_auth_token
174
- missing_credentials = Array.new
175
- @openstack_api_key = options[:openstack_api_key]
176
- @openstack_username = options[:openstack_username]
177
- @openstack_region = options[:openstack_region]
178
-
179
- missing_credentials << :openstack_api_key unless @openstack_api_key
180
- missing_credentials << :openstack_username unless @openstack_username
181
- raise ArgumentError, "Missing required arguments: #{missing_credentials.join(', ')}" unless missing_credentials.empty?
182
- end
183
-
184
- @openstack_tenant = options[:openstack_tenant]
185
- @openstack_auth_uri = URI.parse(options[:openstack_auth_url])
186
- @openstack_management_url = options[:openstack_management_url]
187
- @openstack_must_reauthenticate = false
188
- @openstack_service_type = options[:openstack_service_type] || ['identity']
189
- @openstack_service_name = options[:openstack_service_name]
190
-
191
- @connection_options = options[:connection_options] || {}
192
-
193
- @openstack_current_user_id = options[:openstack_current_user_id]
194
-
195
- @openstack_endpoint_type = options[:openstack_endpoint_type] || 'adminURL'
196
-
197
- @current_user = options[:current_user]
198
- @current_tenant = options[:current_tenant]
199
-
200
- authenticate
201
-
202
- @persistent = options[:persistent] || false
203
- @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
204
- end
205
-
206
- def credentials
207
- { :provider => 'openstack',
208
- :openstack_auth_url => @openstack_auth_uri.to_s,
209
- :openstack_auth_token => @auth_token,
210
- :openstack_management_url => @openstack_management_url,
211
- :openstack_current_user_id => @openstack_current_user_id,
212
- :current_user => @current_user,
213
- :current_tenant => @current_tenant }
214
- end
215
-
216
- def reload
217
- @connection.reset
218
- end
219
-
220
- def request(params)
221
- retried = false
222
- begin
223
- response = @connection.request(params.merge({
224
- :headers => {
225
- 'Content-Type' => 'application/json',
226
- 'Accept' => 'application/json',
227
- 'X-Auth-Token' => @auth_token
228
- }.merge!(params[:headers] || {}),
229
- :path => "#{@path}/#{params[:path]}"#,
230
- }))
231
- rescue Excon::Errors::Unauthorized => error
232
- raise if retried
233
- retried = true
234
-
235
- @openstack_must_reauthenticate = true
236
- authenticate
237
- retry
238
- rescue Excon::Errors::HTTPStatusError => error
239
- raise case error
240
- when Excon::Errors::NotFound
241
- Fog::Identity::OpenStack::NotFound.slurp(error)
242
- else
243
- error
244
- end
245
- end
246
- unless response.body.empty?
247
- response.body = Fog::JSON.decode(response.body)
248
- end
249
- response
250
- end
251
-
252
- private
24
+ module Common
253
25
 
254
26
  def authenticate
255
27
  if !@openstack_management_url || @openstack_must_reauthenticate
256
28
  options = {
257
- :openstack_api_key => @openstack_api_key,
258
- :openstack_username => @openstack_username,
259
- :openstack_auth_token => @openstack_must_reauthenticate ? nil : @openstack_auth_token,
260
- :openstack_auth_uri => @openstack_auth_uri,
261
- :openstack_tenant => @openstack_tenant,
262
- :openstack_service_type => @openstack_service_type,
263
- :openstack_service_name => @openstack_service_name,
264
- :openstack_endpoint_type => @openstack_endpoint_type,
265
- :openstack_region => @openstack_region
29
+ :openstack_api_key => @openstack_api_key,
30
+ :openstack_username => @openstack_username,
31
+ :openstack_auth_token => @openstack_must_reauthenticate ? nil : @openstack_auth_token,
32
+ :openstack_auth_uri => @openstack_auth_uri,
33
+ :openstack_tenant => @openstack_tenant,
34
+ :openstack_service_type => @openstack_service_type,
35
+ :openstack_service_name => @openstack_service_name,
36
+ :openstack_endpoint_type => @openstack_endpoint_type,
37
+ :openstack_region => @openstack_region
266
38
  }
267
39
 
268
- credentials = Fog::OpenStack.authenticate_v2(options, @connection_options)
40
+ credentials = Fog::OpenStack.authenticate(options, @connection_options)
269
41
 
270
42
  @current_user = credentials[:user]
271
43
  @current_tenant = credentials[:tenant]
@@ -281,14 +53,17 @@ module Fog
281
53
  uri = URI.parse(@openstack_management_url)
282
54
  end
283
55
 
284
- @host = uri.host
285
- @path = uri.path
56
+ @host = uri.host
57
+ @path = uri.path
286
58
  @path.sub!(/\/$/, '')
287
- @port = uri.port
59
+ @port = uri.port
288
60
  @scheme = uri.scheme
289
61
  true
290
62
  end
63
+
291
64
  end
292
65
  end
66
+
67
+
293
68
  end
294
69
  end