fog 1.30.0 → 1.31.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +39 -0
- data/CONTRIBUTORS.md +73 -1
- data/LICENSE.md +1 -1
- data/Rakefile +10 -8
- data/fog.gemspec +6 -3
- data/lib/fog/cloudstack/models/compute/server.rb +2 -0
- data/lib/fog/openstack.rb +1 -1
- data/lib/fog/openstack/baremetal.rb +5 -5
- data/lib/fog/openstack/compute.rb +20 -9
- data/lib/fog/openstack/core.rb +53 -14
- data/lib/fog/openstack/examples/compute/basics.rb +3 -1
- data/lib/fog/openstack/identity.rb +29 -254
- data/lib/fog/openstack/identity_v2.rb +264 -0
- data/lib/fog/openstack/identity_v3.rb +249 -0
- data/lib/fog/openstack/image.rb +1 -1
- data/lib/fog/openstack/metering.rb +1 -1
- data/lib/fog/openstack/models/baremetal/node.rb +22 -0
- data/lib/fog/openstack/models/compute/flavor.rb +13 -0
- data/lib/fog/openstack/models/compute/service.rb +48 -0
- data/lib/fog/openstack/models/compute/services.rb +20 -0
- data/lib/fog/openstack/models/identity_v2/ec2_credential.rb +45 -0
- data/lib/fog/openstack/models/identity_v2/ec2_credentials.rb +55 -0
- data/lib/fog/openstack/models/identity_v2/role.rb +52 -0
- data/lib/fog/openstack/models/identity_v2/roles.rb +22 -0
- data/lib/fog/openstack/models/identity_v2/tenant.rb +64 -0
- data/lib/fog/openstack/models/identity_v2/tenants.rb +31 -0
- data/lib/fog/openstack/models/identity_v2/user.rb +71 -0
- data/lib/fog/openstack/models/identity_v2/users.rb +43 -0
- data/lib/fog/openstack/models/identity_v3/domain.rb +47 -0
- data/lib/fog/openstack/models/identity_v3/domains.rb +36 -0
- data/lib/fog/openstack/models/identity_v3/endpoint.rb +50 -0
- data/lib/fog/openstack/models/identity_v3/endpoints.rb +27 -0
- data/lib/fog/openstack/models/identity_v3/group.rb +96 -0
- data/lib/fog/openstack/models/identity_v3/groups.rb +31 -0
- data/lib/fog/openstack/models/identity_v3/os_credential.rb +73 -0
- data/lib/fog/openstack/models/identity_v3/os_credentials.rb +31 -0
- data/lib/fog/openstack/models/identity_v3/policies.rb +31 -0
- data/lib/fog/openstack/models/identity_v3/policy.rb +46 -0
- data/lib/fog/openstack/models/identity_v3/project.rb +98 -0
- data/lib/fog/openstack/models/identity_v3/projects.rb +31 -0
- data/lib/fog/openstack/models/identity_v3/role.rb +45 -0
- data/lib/fog/openstack/models/identity_v3/role_assignment.rb +22 -0
- data/lib/fog/openstack/models/identity_v3/role_assignments.rb +22 -0
- data/lib/fog/openstack/models/identity_v3/roles.rb +35 -0
- data/lib/fog/openstack/models/identity_v3/service.rb +47 -0
- data/lib/fog/openstack/models/identity_v3/services.rb +31 -0
- data/lib/fog/openstack/models/identity_v3/token.rb +26 -0
- data/lib/fog/openstack/models/identity_v3/tokens.rb +40 -0
- data/lib/fog/openstack/models/identity_v3/user.rb +87 -0
- data/lib/fog/openstack/models/identity_v3/users.rb +35 -0
- data/lib/fog/openstack/network.rb +2 -9
- data/lib/fog/openstack/orchestration.rb +1 -6
- data/lib/fog/openstack/planning.rb +1 -1
- data/lib/fog/openstack/requests/baremetal/set_node_maintenance.rb +36 -0
- data/lib/fog/openstack/requests/baremetal/set_node_power_state.rb +35 -0
- data/lib/fog/openstack/requests/baremetal/set_node_provision_state.rb +38 -0
- data/lib/fog/openstack/requests/baremetal/unset_node_maintenance.rb +36 -0
- data/lib/fog/openstack/requests/compute/create_flavor_metadata.rb +38 -0
- data/lib/fog/openstack/requests/compute/create_security_group.rb +1 -1
- data/lib/fog/openstack/requests/compute/delete_service.rb +32 -0
- data/lib/fog/openstack/requests/compute/disable_service.rb +37 -0
- data/lib/fog/openstack/requests/compute/disable_service_log_reason.rb +38 -0
- data/lib/fog/openstack/requests/compute/enable_service.rb +38 -0
- data/lib/fog/openstack/requests/compute/get_flavor_metadata.rb +27 -0
- data/lib/fog/openstack/requests/compute/list_services.rb +72 -0
- data/lib/fog/openstack/requests/compute/list_tenants_with_flavor_access.rb +1 -1
- data/lib/fog/openstack/requests/compute/list_zones.rb +32 -0
- data/lib/fog/openstack/requests/identity_v2/add_user_to_tenant.rb +36 -0
- data/lib/fog/openstack/requests/identity_v2/check_token.rb +22 -0
- data/lib/fog/openstack/requests/identity_v2/create_ec2_credential.rb +59 -0
- data/lib/fog/openstack/requests/identity_v2/create_role.rb +38 -0
- data/lib/fog/openstack/requests/identity_v2/create_tenant.rb +34 -0
- data/lib/fog/openstack/requests/identity_v2/create_user.rb +45 -0
- data/lib/fog/openstack/requests/identity_v2/create_user_role.rb +26 -0
- data/lib/fog/openstack/requests/identity_v2/delete_ec2_credential.rb +43 -0
- data/lib/fog/openstack/requests/identity_v2/delete_role.rb +30 -0
- data/lib/fog/openstack/requests/identity_v2/delete_tenant.rb +33 -0
- data/lib/fog/openstack/requests/identity_v2/delete_user.rb +30 -0
- data/lib/fog/openstack/requests/identity_v2/delete_user_role.rb +25 -0
- data/lib/fog/openstack/requests/identity_v2/get_ec2_credential.rb +50 -0
- data/lib/fog/openstack/requests/identity_v2/get_role.rb +30 -0
- data/lib/fog/openstack/requests/identity_v2/get_tenant.rb +33 -0
- data/lib/fog/openstack/requests/identity_v2/get_tenants_by_id.rb +20 -0
- data/lib/fog/openstack/requests/identity_v2/get_tenants_by_name.rb +20 -0
- data/lib/fog/openstack/requests/identity_v2/get_user_by_id.rb +34 -0
- data/lib/fog/openstack/requests/identity_v2/get_user_by_name.rb +29 -0
- data/lib/fog/openstack/requests/identity_v2/list_ec2_credentials.rb +45 -0
- data/lib/fog/openstack/requests/identity_v2/list_endpoints_for_token.rb +20 -0
- data/lib/fog/openstack/requests/identity_v2/list_roles.rb +33 -0
- data/lib/fog/openstack/requests/identity_v2/list_roles_for_user_on_tenant.rb +32 -0
- data/lib/fog/openstack/requests/identity_v2/list_tenants.rb +47 -0
- data/lib/fog/openstack/requests/identity_v2/list_user_global_roles.rb +20 -0
- data/lib/fog/openstack/requests/identity_v2/list_users.rb +35 -0
- data/lib/fog/openstack/requests/identity_v2/remove_user_from_tenant.rb +22 -0
- data/lib/fog/openstack/requests/identity_v2/set_tenant.rb +21 -0
- data/lib/fog/openstack/requests/identity_v2/update_tenant.rb +30 -0
- data/lib/fog/openstack/requests/identity_v2/update_user.rb +34 -0
- data/lib/fog/openstack/requests/identity_v2/validate_token.rb +22 -0
- data/lib/fog/openstack/requests/identity_v3/add_user_to_group.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/auth_domains.rb +29 -0
- data/lib/fog/openstack/requests/identity_v3/auth_projects.rb +29 -0
- data/lib/fog/openstack/requests/identity_v3/check_domain_group_role.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/check_domain_user_role.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/check_project_group_role.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/check_project_user_role.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/create_domain.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/create_endpoint.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/create_group.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/create_os_credential.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/create_policy.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/create_project.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/create_role.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/create_service.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/create_user.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/delete_domain.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/delete_endpoint.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/delete_group.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/delete_os_credential.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/delete_policy.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/delete_project.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/delete_role.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/delete_service.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/delete_user.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/get_domain.rb +23 -0
- data/lib/fog/openstack/requests/identity_v3/get_endpoint.rb +23 -0
- data/lib/fog/openstack/requests/identity_v3/get_group.rb +23 -0
- data/lib/fog/openstack/requests/identity_v3/get_os_credential.rb +23 -0
- data/lib/fog/openstack/requests/identity_v3/get_policy.rb +23 -0
- data/lib/fog/openstack/requests/identity_v3/get_project.rb +23 -0
- data/lib/fog/openstack/requests/identity_v3/get_role.rb +23 -0
- data/lib/fog/openstack/requests/identity_v3/get_service.rb +23 -0
- data/lib/fog/openstack/requests/identity_v3/get_user.rb +23 -0
- data/lib/fog/openstack/requests/identity_v3/grant_domain_group_role.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/grant_domain_user_role.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/grant_project_group_role.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/grant_project_user_role.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/group_user_check.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/list_domain_group_roles.rb +23 -0
- data/lib/fog/openstack/requests/identity_v3/list_domain_user_roles.rb +23 -0
- data/lib/fog/openstack/requests/identity_v3/list_domains.rb +31 -0
- data/lib/fog/openstack/requests/identity_v3/list_endpoints.rb +31 -0
- data/lib/fog/openstack/requests/identity_v3/list_group_users.rb +32 -0
- data/lib/fog/openstack/requests/identity_v3/list_groups.rb +42 -0
- data/lib/fog/openstack/requests/identity_v3/list_os_credentials.rb +29 -0
- data/lib/fog/openstack/requests/identity_v3/list_policies.rb +28 -0
- data/lib/fog/openstack/requests/identity_v3/list_project_group_roles.rb +23 -0
- data/lib/fog/openstack/requests/identity_v3/list_project_user_roles.rb +23 -0
- data/lib/fog/openstack/requests/identity_v3/list_projects.rb +42 -0
- data/lib/fog/openstack/requests/identity_v3/list_role_assignments.rb +35 -0
- data/lib/fog/openstack/requests/identity_v3/list_roles.rb +42 -0
- data/lib/fog/openstack/requests/identity_v3/list_services.rb +30 -0
- data/lib/fog/openstack/requests/identity_v3/list_user_groups.rb +23 -0
- data/lib/fog/openstack/requests/identity_v3/list_user_projects.rb +23 -0
- data/lib/fog/openstack/requests/identity_v3/list_users.rb +32 -0
- data/lib/fog/openstack/requests/identity_v3/remove_user_from_group.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/revoke_domain_group_role.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/revoke_domain_user_role.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/revoke_project_group_role.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/revoke_project_user_role.rb +20 -0
- data/lib/fog/openstack/requests/identity_v3/token_authenticate.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/token_check.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/token_revoke.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/token_validate.rb +22 -0
- data/lib/fog/openstack/requests/identity_v3/update_domain.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/update_endpoint.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/update_group.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/update_os_credential.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/update_policy.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/update_project.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/update_role.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/update_service.rb +21 -0
- data/lib/fog/openstack/requests/identity_v3/update_user.rb +21 -0
- data/lib/fog/openstack/requests/image/list_public_images_detailed.rb +1 -1
- data/lib/fog/openstack/volume.rb +1 -1
- data/lib/fog/version.rb +1 -1
- data/lib/fog/vsphere/requests/compute/cloudinit_to_customspec.rb +27 -8
- data/lib/fog/vsphere/requests/compute/vm_clone.rb +376 -37
- data/lib/tasks/changelog_task.rb +1 -1
- data/spec/fog/openstack/identity_v3/authv3_a.yml +61 -0
- data/spec/fog/openstack/identity_v3/authv3_b.yml +61 -0
- data/spec/fog/openstack/identity_v3/authv3_c.yml +61 -0
- data/spec/fog/openstack/identity_v3/authv3_project.yml +61 -0
- data/spec/fog/openstack/identity_v3/authv3_token.yml +151 -0
- data/spec/fog/openstack/identity_v3/authv3_unscoped.yml +334 -0
- data/spec/fog/openstack/identity_v3/idv2_unscoped_token_v3.yml +467 -0
- data/spec/fog/openstack/identity_v3/idv3.yml +61 -0
- data/spec/fog/openstack/identity_v3/idv3_credential.yml +111 -0
- data/spec/fog/openstack/identity_v3/idv3_credential_crud.yml +528 -0
- data/spec/fog/openstack/identity_v3/idv3_domain.yml +195 -0
- data/spec/fog/openstack/identity_v3/idv3_domain_crud.yml +686 -0
- data/spec/fog/openstack/identity_v3/idv3_domain_group_roles_mutation.yml +906 -0
- data/spec/fog/openstack/identity_v3/idv3_domain_roles_mutation.yml +505 -0
- data/spec/fog/openstack/identity_v3/idv3_endpoint.yml +303 -0
- data/spec/fog/openstack/identity_v3/idv3_endpoints_crud.yml +718 -0
- data/spec/fog/openstack/identity_v3/idv3_group_crud_mutation.yml +975 -0
- data/spec/fog/openstack/identity_v3/idv3_policy.yml +147 -0
- data/spec/fog/openstack/identity_v3/idv3_policy_crud.yml +368 -0
- data/spec/fog/openstack/identity_v3/idv3_project.yml +211 -0
- data/spec/fog/openstack/identity_v3/idv3_project_crud.yml +663 -0
- data/spec/fog/openstack/identity_v3/idv3_project_group_user_roles_mutation.yml +1378 -0
- data/spec/fog/openstack/identity_v3/idv3_role.yml +199 -0
- data/spec/fog/openstack/identity_v3/idv3_role_crud.yml +616 -0
- data/spec/fog/openstack/identity_v3/idv3_service.yml +223 -0
- data/spec/fog/openstack/identity_v3/idv3_services_crud.yml +562 -0
- data/spec/fog/openstack/identity_v3/idv3_token.yml +240 -0
- data/spec/fog/openstack/identity_v3/idv3_user_crud.yml +572 -0
- data/spec/fog/openstack/identity_v3/idv3_users.yml +393 -0
- data/spec/fog/openstack/identity_v3_spec.rb +929 -0
- data/tests/openstack/requests/baremetal/node_tests.rb +18 -0
- data/tests/openstack/requests/compute/flavor_tests.rb +18 -0
- data/tests/openstack/requests/compute/service_tests.rb +33 -0
- metadata +259 -49
- data/lib/fog/openstack/models/identity/ec2_credential.rb +0 -44
- data/lib/fog/openstack/models/identity/ec2_credentials.rb +0 -53
- data/lib/fog/openstack/models/identity/role.rb +0 -50
- data/lib/fog/openstack/models/identity/roles.rb +0 -20
- data/lib/fog/openstack/models/identity/tenant.rb +0 -62
- data/lib/fog/openstack/models/identity/tenants.rb +0 -29
- data/lib/fog/openstack/models/identity/user.rb +0 -69
- data/lib/fog/openstack/models/identity/users.rb +0 -41
- data/lib/fog/openstack/requests/identity/add_user_to_tenant.rb +0 -34
- data/lib/fog/openstack/requests/identity/check_token.rb +0 -20
- data/lib/fog/openstack/requests/identity/create_ec2_credential.rb +0 -57
- data/lib/fog/openstack/requests/identity/create_role.rb +0 -36
- data/lib/fog/openstack/requests/identity/create_tenant.rb +0 -32
- data/lib/fog/openstack/requests/identity/create_user.rb +0 -43
- data/lib/fog/openstack/requests/identity/create_user_role.rb +0 -24
- data/lib/fog/openstack/requests/identity/delete_ec2_credential.rb +0 -42
- data/lib/fog/openstack/requests/identity/delete_role.rb +0 -28
- data/lib/fog/openstack/requests/identity/delete_tenant.rb +0 -31
- data/lib/fog/openstack/requests/identity/delete_user.rb +0 -28
- data/lib/fog/openstack/requests/identity/delete_user_role.rb +0 -23
- data/lib/fog/openstack/requests/identity/get_ec2_credential.rb +0 -48
- data/lib/fog/openstack/requests/identity/get_role.rb +0 -28
- data/lib/fog/openstack/requests/identity/get_tenant.rb +0 -31
- data/lib/fog/openstack/requests/identity/get_tenants_by_id.rb +0 -18
- data/lib/fog/openstack/requests/identity/get_tenants_by_name.rb +0 -18
- data/lib/fog/openstack/requests/identity/get_user_by_id.rb +0 -32
- data/lib/fog/openstack/requests/identity/get_user_by_name.rb +0 -27
- data/lib/fog/openstack/requests/identity/list_ec2_credentials.rb +0 -43
- data/lib/fog/openstack/requests/identity/list_endpoints_for_token.rb +0 -18
- data/lib/fog/openstack/requests/identity/list_roles.rb +0 -31
- data/lib/fog/openstack/requests/identity/list_roles_for_user_on_tenant.rb +0 -30
- data/lib/fog/openstack/requests/identity/list_tenants.rb +0 -45
- data/lib/fog/openstack/requests/identity/list_user_global_roles.rb +0 -18
- data/lib/fog/openstack/requests/identity/list_users.rb +0 -33
- data/lib/fog/openstack/requests/identity/remove_user_from_tenant.rb +0 -20
- data/lib/fog/openstack/requests/identity/set_tenant.rb +0 -19
- data/lib/fog/openstack/requests/identity/update_tenant.rb +0 -28
- data/lib/fog/openstack/requests/identity/update_user.rb +0 -32
- 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-
|
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
|
-
|
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.
|
15
|
-
s.date = "2015-
|
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.
|
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
@@ -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.
|
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}/#{
|
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
|
-
|
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
|
444
|
+
@path = uri.path
|
434
445
|
|
435
446
|
@path.sub!(/\/$/, '')
|
436
447
|
unless @path.match(/1\.1|v2/)
|
data/lib/fog/openstack/core.rb
CHANGED
@@ -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] || '
|
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
|
-
|
242
|
-
|
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
|
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
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
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
|
-
|
128
|
-
|
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
|
-
|
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
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
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.
|
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
|
285
|
-
@path
|
56
|
+
@host = uri.host
|
57
|
+
@path = uri.path
|
286
58
|
@path.sub!(/\/$/, '')
|
287
|
-
@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
|