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
@@ -0,0 +1,264 @@
1
+ require 'fog/openstack/core'
2
+ require 'fog/openstack/identity'
3
+
4
+ module Fog
5
+ module Identity
6
+ class OpenStack
7
+ class V2 < Fog::Service
8
+
9
+ requires :openstack_auth_url
10
+ recognizes :openstack_auth_token, :openstack_management_url, :persistent,
11
+ :openstack_service_type, :openstack_service_name, :openstack_tenant,
12
+ :openstack_api_key, :openstack_username, :openstack_current_user_id,
13
+ :current_user, :current_tenant,
14
+ :openstack_endpoint_type, :openstack_region
15
+
16
+ model_path 'fog/openstack/models/identity_v2'
17
+ model :tenant
18
+ collection :tenants
19
+ model :user
20
+ collection :users
21
+ model :role
22
+ collection :roles
23
+ model :ec2_credential
24
+ collection :ec2_credentials
25
+
26
+ request_path 'fog/openstack/requests/identity_v2'
27
+
28
+ request :check_token
29
+ request :validate_token
30
+
31
+ request :list_tenants
32
+ request :create_tenant
33
+ request :get_tenant
34
+ request :get_tenants_by_id
35
+ request :get_tenants_by_name
36
+ request :update_tenant
37
+ request :delete_tenant
38
+
39
+ request :list_users
40
+ request :create_user
41
+ request :update_user
42
+ request :delete_user
43
+ request :get_user_by_id
44
+ request :get_user_by_name
45
+ request :add_user_to_tenant
46
+ request :remove_user_from_tenant
47
+
48
+ request :list_endpoints_for_token
49
+ request :list_roles_for_user_on_tenant
50
+ request :list_user_global_roles
51
+
52
+ request :create_role
53
+ request :delete_role
54
+ request :delete_user_role
55
+ request :create_user_role
56
+ request :get_role
57
+ request :list_roles
58
+
59
+ request :set_tenant
60
+
61
+ request :create_ec2_credential
62
+ request :delete_ec2_credential
63
+ request :get_ec2_credential
64
+ request :list_ec2_credentials
65
+
66
+ class Mock
67
+ attr_reader :auth_token
68
+ attr_reader :auth_token_expiration
69
+ attr_reader :current_user
70
+ attr_reader :current_tenant
71
+ attr_reader :unscoped_token
72
+
73
+ def self.data
74
+ @users ||= {}
75
+ @roles ||= {}
76
+ @tenants ||= {}
77
+ @ec2_credentials ||= Hash.new { |hash, key| hash[key] = {} }
78
+ @user_tenant_membership ||= {}
79
+
80
+ @data ||= Hash.new do |hash, key|
81
+ hash[key] = {
82
+ :users => @users,
83
+ :roles => @roles,
84
+ :tenants => @tenants,
85
+ :ec2_credentials => @ec2_credentials,
86
+ :user_tenant_membership => @user_tenant_membership
87
+ }
88
+ end
89
+ end
90
+
91
+ def self.reset!
92
+ @data = nil
93
+ @users = nil
94
+ @roles = nil
95
+ @tenants = nil
96
+ @ec2_credentials = nil
97
+ end
98
+
99
+ def initialize(options={})
100
+ @openstack_username = options[:openstack_username] || 'admin'
101
+ @openstack_tenant = options[:openstack_tenant] || 'admin'
102
+ @openstack_auth_uri = URI.parse(options[:openstack_auth_url])
103
+ @openstack_management_url = @openstack_auth_uri.to_s
104
+
105
+ @auth_token = Fog::Mock.random_base64(64)
106
+ @auth_token_expiration = (Time.now.utc + 86400).iso8601
107
+
108
+ @admin_tenant = self.data[:tenants].values.find do |u|
109
+ u['name'] == 'admin'
110
+ end
111
+
112
+ if @openstack_tenant
113
+ @current_tenant = self.data[:tenants].values.find do |u|
114
+ u['name'] == @openstack_tenant
115
+ end
116
+
117
+ unless @current_tenant
118
+ @current_tenant_id = Fog::Mock.random_hex(32)
119
+ @current_tenant = self.data[:tenants][@current_tenant_id] = {
120
+ 'id' => @current_tenant_id,
121
+ 'name' => @openstack_tenant
122
+ }
123
+ else
124
+ @current_tenant_id = @current_tenant['id']
125
+ end
126
+ else
127
+ @current_tenant = @admin_tenant
128
+ end
129
+
130
+ @current_user = self.data[:users].values.find do |u|
131
+ u['name'] == @openstack_username
132
+ end
133
+ @current_tenant_id = Fog::Mock.random_hex(32)
134
+
135
+ unless @current_user
136
+ @current_user_id = Fog::Mock.random_hex(32)
137
+ @current_user = self.data[:users][@current_user_id] = {
138
+ 'id' => @current_user_id,
139
+ 'name' => @openstack_username,
140
+ 'email' => "#{@openstack_username}@mock.com",
141
+ 'tenantId' => Fog::Mock.random_numbers(6).to_s,
142
+ 'enabled' => true
143
+ }
144
+ else
145
+ @current_user_id = @current_user['id']
146
+ end
147
+ end
148
+
149
+ def data
150
+ self.class.data[@openstack_username]
151
+ end
152
+
153
+ def reset_data
154
+ self.class.data.delete(@openstack_username)
155
+ end
156
+
157
+ def credentials
158
+ {:provider => 'openstack',
159
+ :openstack_auth_url => @openstack_auth_uri.to_s,
160
+ :openstack_auth_token => @auth_token,
161
+ :openstack_management_url => @openstack_management_url,
162
+ :openstack_current_user_id => @openstack_current_user_id,
163
+ :current_user => @current_user,
164
+ :current_tenant => @current_tenant}
165
+ end
166
+ end
167
+
168
+ class Real
169
+ attr_reader :current_user
170
+ attr_reader :current_tenant
171
+ attr_reader :unscoped_token
172
+
173
+ include Fog::Identity::OpenStack::Common
174
+
175
+ def initialize(options={})
176
+ @openstack_auth_token = options[:openstack_auth_token]
177
+
178
+ unless @openstack_auth_token
179
+ missing_credentials = Array.new
180
+ @openstack_api_key = options[:openstack_api_key]
181
+ @openstack_username = options[:openstack_username]
182
+ @openstack_region = options[:openstack_region]
183
+
184
+ missing_credentials << :openstack_api_key unless @openstack_api_key
185
+ missing_credentials << :openstack_username unless @openstack_username
186
+ raise ArgumentError, "Missing required arguments: #{missing_credentials.join(', ')}" unless missing_credentials.empty?
187
+ end
188
+
189
+ @openstack_tenant = options[:openstack_tenant]
190
+ @openstack_auth_uri = URI.parse(options[:openstack_auth_url])
191
+ @openstack_management_url = options[:openstack_management_url]
192
+ @openstack_must_reauthenticate = false
193
+ @openstack_service_type = options[:openstack_service_type] || ['identity']
194
+ @openstack_service_name = options[:openstack_service_name]
195
+
196
+ @connection_options = options[:connection_options] || {}
197
+
198
+ @openstack_current_user_id = options[:openstack_current_user_id]
199
+
200
+ @openstack_endpoint_type = options[:openstack_endpoint_type] || 'adminURL'
201
+
202
+ @current_user = options[:current_user]
203
+ @current_tenant = options[:current_tenant]
204
+
205
+ authenticate
206
+
207
+ @persistent = options[:persistent] || false
208
+ @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
209
+ end
210
+
211
+ def credentials
212
+ {:provider => 'openstack',
213
+ :openstack_auth_url => @openstack_auth_uri.to_s,
214
+ :openstack_auth_token => @auth_token,
215
+ :openstack_management_url => @openstack_management_url,
216
+ :openstack_current_user_id => @openstack_current_user_id,
217
+ :current_user => @current_user,
218
+ :current_tenant => @current_tenant}
219
+ end
220
+
221
+ def reload
222
+ @connection.reset
223
+ end
224
+
225
+ def request(params)
226
+ retried = false
227
+ begin
228
+ response = @connection.request(params.merge({
229
+ :headers => {
230
+ 'Content-Type' => 'application/json',
231
+ 'Accept' => 'application/json',
232
+ 'X-Auth-Token' => @auth_token
233
+ }.merge!(params[:headers] || {}),
234
+ :path => "#{@path}/#{params[:path]}" #,
235
+ }))
236
+ rescue Excon::Errors::Unauthorized => error
237
+ raise if retried
238
+ retried = true
239
+
240
+ @openstack_must_reauthenticate = true
241
+ authenticate
242
+ retry
243
+ rescue Excon::Errors::HTTPStatusError => error
244
+ raise case error
245
+ when Excon::Errors::NotFound
246
+ Fog::Identity::OpenStack::NotFound.slurp(error)
247
+ else
248
+ error
249
+ end
250
+ end
251
+ unless response.body.empty?
252
+ response.body = Fog::JSON.decode(response.body)
253
+ end
254
+ response
255
+ end
256
+
257
+ private
258
+
259
+
260
+ end
261
+ end
262
+ end
263
+ end
264
+ end
@@ -0,0 +1,249 @@
1
+ require 'fog/openstack/core'
2
+ require 'fog/openstack/identity'
3
+
4
+ module Fog
5
+ module Identity
6
+ class OpenStack
7
+ class V3 < Fog::Service
8
+
9
+ requires :openstack_auth_url
10
+ recognizes :openstack_auth_token, :openstack_management_url, :persistent,
11
+ :openstack_service_type, :openstack_service_name, :openstack_tenant,
12
+ :openstack_project_name, :openstack_domain_name, :openstack_userid,
13
+ :openstack_api_key, :openstack_username, :openstack_current_user_id,
14
+ :current_user, :current_tenant,
15
+ :openstack_endpoint_type, :openstack_region, :openstack_domain_id,
16
+ :openstack_domain, :openstack_project, :provider
17
+
18
+ model_path 'fog/openstack/models/identity_v3'
19
+ model :domain
20
+ collection :domains
21
+ model :endpoint
22
+ collection :endpoints
23
+ model :project
24
+ collection :projects
25
+ model :service
26
+ collection :services
27
+ model :token
28
+ collection :tokens
29
+ model :user
30
+ collection :users
31
+ model :group
32
+ collection :groups
33
+ model :role
34
+ collection :roles
35
+ model :role_assignment
36
+ collection :role_assignments
37
+ model :os_credential
38
+ collection :os_credentials
39
+ model :policy
40
+ collection :policies
41
+
42
+ request_path 'fog/openstack/requests/identity_v3'
43
+
44
+
45
+ request :list_users
46
+ request :get_user
47
+ request :create_user
48
+ request :update_user
49
+ request :delete_user
50
+ request :list_user_groups
51
+ request :list_user_projects
52
+ request :list_groups
53
+ request :get_group
54
+ request :create_group
55
+ request :update_group
56
+ request :delete_group
57
+ request :add_user_to_group
58
+ request :remove_user_from_group
59
+ request :group_user_check
60
+ request :list_group_users
61
+ request :list_roles
62
+ request :list_role_assignments
63
+ request :get_role
64
+ request :create_role
65
+ request :update_role
66
+ request :delete_role
67
+ request :auth_domains
68
+ request :auth_projects
69
+ request :list_domains
70
+ request :get_domain
71
+ request :create_domain
72
+ request :update_domain
73
+ request :delete_domain
74
+ request :list_domain_user_roles
75
+ request :grant_domain_user_role
76
+ request :check_domain_user_role
77
+ request :revoke_domain_user_role
78
+ request :list_domain_group_roles
79
+ request :grant_domain_group_role
80
+ request :check_domain_group_role
81
+ request :revoke_domain_group_role
82
+ request :list_endpoints
83
+ request :get_endpoint
84
+ request :create_endpoint
85
+ request :update_endpoint
86
+ request :delete_endpoint
87
+ request :list_projects
88
+ request :get_project
89
+ request :create_project
90
+ request :update_project
91
+ request :delete_project
92
+ request :list_project_user_roles
93
+ request :grant_project_user_role
94
+ request :check_project_user_role
95
+ request :revoke_project_user_role
96
+ request :list_project_group_roles
97
+ request :grant_project_group_role
98
+ request :check_project_group_role
99
+ request :revoke_project_group_role
100
+ request :list_services
101
+ request :get_service
102
+ request :create_service
103
+ request :update_service
104
+ request :delete_service
105
+ request :token_authenticate
106
+ request :token_validate
107
+ request :token_check
108
+ request :token_revoke
109
+ request :list_os_credentials
110
+ request :get_os_credential
111
+ request :create_os_credential
112
+ request :update_os_credential
113
+ request :delete_os_credential
114
+ request :list_policies
115
+ request :get_policy
116
+ request :create_policy
117
+ request :update_policy
118
+ request :delete_policy
119
+
120
+ class Mock
121
+ def initialize(options={})
122
+
123
+ end
124
+ end
125
+
126
+ def self.get_api_version uri, connection_options={}
127
+ connection = Fog::Core::Connection.new(uri, false, connection_options)
128
+ response = connection.request({
129
+ :expects => [200],
130
+ :headers => {'Content-Type' => 'application/json',
131
+ 'Accept' => 'application/json'},
132
+ :method => 'GET'
133
+ })
134
+
135
+ body = Fog::JSON.decode(response.body)
136
+ version = nil
137
+ unless body['version'].empty?
138
+ version = body['version']['id']
139
+ end
140
+ if version.nil?
141
+ raise Fog::OpenStack::Errors::ServiceUnavailable.new(
142
+ "No version available at #{uri}")
143
+ end
144
+
145
+ version
146
+ end
147
+
148
+ class Real
149
+ attr_reader :current_user
150
+ attr_reader :current_tenant
151
+ attr_reader :unscoped_token
152
+ attr_reader :auth_token
153
+
154
+ include Fog::Identity::OpenStack::Common
155
+
156
+ def initialize(options={})
157
+ @openstack_auth_token = options[:openstack_auth_token]
158
+
159
+ @openstack_region = options[:openstack_region]
160
+
161
+ unless @openstack_auth_token
162
+ missing_credentials = Array.new
163
+ @openstack_api_key = options[:openstack_api_key]
164
+ @openstack_username = options[:openstack_username]
165
+ @openstack_userid = options[:openstack_userid]
166
+
167
+ missing_credentials << :openstack_api_key unless @openstack_api_key
168
+ unless @openstack_username || @openstack_userid
169
+ missing_credentials << 'openstack_username or openstack_userid'
170
+ end
171
+ raise ArgumentError, "Missing required arguments: #{missing_credentials.join(', ')}" unless missing_credentials.empty?
172
+ end
173
+
174
+
175
+ @openstack_tenant = options[:openstack_tenant]
176
+ @openstack_auth_uri = URI.parse(options[:openstack_auth_url])
177
+ @openstack_management_url = options[:openstack_management_url]
178
+ @openstack_must_reauthenticate = false
179
+ @openstack_service_type = options[:openstack_service_type] || ['identity_v3','identityv3','identity']
180
+ @openstack_service_name = options[:openstack_service_name]
181
+
182
+ @connection_options = options[:connection_options] || {}
183
+
184
+ @openstack_current_user_id = options[:openstack_current_user_id]
185
+
186
+ @openstack_endpoint_type = options[:openstack_endpoint_type] || 'adminURL'
187
+
188
+ @current_user = options[:current_user]
189
+ @current_tenant = options[:current_tenant]
190
+
191
+ authenticate
192
+
193
+ @persistent = options[:persistent] || false
194
+ @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
195
+ end
196
+
197
+ def credentials
198
+ {:provider => 'openstack',
199
+ :openstack_auth_url => @openstack_auth_uri.to_s,
200
+ :openstack_auth_token => @auth_token,
201
+ :openstack_management_url => @openstack_management_url,
202
+ :openstack_current_user_id => @openstack_current_user_id,
203
+ :current_user => @current_user,
204
+ :current_tenant => @current_tenant}
205
+ end
206
+
207
+ def reload
208
+ @connection.reset
209
+ end
210
+
211
+ def request(params)
212
+ retried = false
213
+ begin
214
+ response = @connection.request(params.merge({
215
+ :headers => {
216
+ 'Content-Type' => 'application/json',
217
+ 'Accept' => 'application/json',
218
+ 'X-Auth-Token' => @auth_token
219
+ }.merge!(params[:headers] || {}),
220
+ :path => "#{@path}/#{params[:path]}" #,
221
+ }))
222
+ rescue Excon::Errors::Unauthorized => error
223
+ raise if retried
224
+ retried = true
225
+
226
+ @openstack_must_reauthenticate = true
227
+ authenticate
228
+ retry
229
+ rescue Excon::Errors::HTTPStatusError => error
230
+ raise case error
231
+ when Excon::Errors::NotFound
232
+ Fog::Identity::OpenStack::NotFound.slurp(error)
233
+ else
234
+ error
235
+ end
236
+ end
237
+ unless response.body.empty?
238
+ response.body = Fog::JSON.decode(response.body)
239
+ end
240
+ response
241
+ end
242
+
243
+
244
+ end
245
+
246
+ end
247
+ end
248
+ end
249
+ end