fog 1.30.0 → 1.31.0

Sign up to get free protection for your applications and to get access to all the features.
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