openstack-keystone-client 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE CHANGED
@@ -1,22 +1,178 @@
1
- Copyright (c) 2012 yuanying, atoato88
2
-
3
- MIT License
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1
+ Copyright (c) 2012 Yuanying, atoato88
2
+ All rights reserved.
3
+
4
+
5
+ Apache License
6
+ Version 2.0, January 2004
7
+ http://www.apache.org/licenses/
8
+
9
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
10
+
11
+ 1. Definitions.
12
+
13
+ "License" shall mean the terms and conditions for use, reproduction,
14
+ and distribution as defined by Sections 1 through 9 of this document.
15
+
16
+ "Licensor" shall mean the copyright owner or entity authorized by
17
+ the copyright owner that is granting the License.
18
+
19
+ "Legal Entity" shall mean the union of the acting entity and all
20
+ other entities that control, are controlled by, or are under common
21
+ control with that entity. For the purposes of this definition,
22
+ "control" means (i) the power, direct or indirect, to cause the
23
+ direction or management of such entity, whether by contract or
24
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
25
+ outstanding shares, or (iii) beneficial ownership of such entity.
26
+
27
+ "You" (or "Your") shall mean an individual or Legal Entity
28
+ exercising permissions granted by this License.
29
+
30
+ "Source" form shall mean the preferred form for making modifications,
31
+ including but not limited to software source code, documentation
32
+ source, and configuration files.
33
+
34
+ "Object" form shall mean any form resulting from mechanical
35
+ transformation or translation of a Source form, including but
36
+ not limited to compiled object code, generated documentation,
37
+ and conversions to other media types.
38
+
39
+ "Work" shall mean the work of authorship, whether in Source or
40
+ Object form, made available under the License, as indicated by a
41
+ copyright notice that is included in or attached to the work
42
+ (an example is provided in the Appendix below).
43
+
44
+ "Derivative Works" shall mean any work, whether in Source or Object
45
+ form, that is based on (or derived from) the Work and for which the
46
+ editorial revisions, annotations, elaborations, or other modifications
47
+ represent, as a whole, an original work of authorship. For the purposes
48
+ of this License, Derivative Works shall not include works that remain
49
+ separable from, or merely link (or bind by name) to the interfaces of,
50
+ the Work and Derivative Works thereof.
51
+
52
+ "Contribution" shall mean any work of authorship, including
53
+ the original version of the Work and any modifications or additions
54
+ to that Work or Derivative Works thereof, that is intentionally
55
+ submitted to Licensor for inclusion in the Work by the copyright owner
56
+ or by an individual or Legal Entity authorized to submit on behalf of
57
+ the copyright owner. For the purposes of this definition, "submitted"
58
+ means any form of electronic, verbal, or written communication sent
59
+ to the Licensor or its representatives, including but not limited to
60
+ communication on electronic mailing lists, source code control systems,
61
+ and issue tracking systems that are managed by, or on behalf of, the
62
+ Licensor for the purpose of discussing and improving the Work, but
63
+ excluding communication that is conspicuously marked or otherwise
64
+ designated in writing by the copyright owner as "Not a Contribution."
65
+
66
+ "Contributor" shall mean Licensor and any individual or Legal Entity
67
+ on behalf of whom a Contribution has been received by Licensor and
68
+ subsequently incorporated within the Work.
69
+
70
+ 2. Grant of Copyright License. Subject to the terms and conditions of
71
+ this License, each Contributor hereby grants to You a perpetual,
72
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
73
+ copyright license to reproduce, prepare Derivative Works of,
74
+ publicly display, publicly perform, sublicense, and distribute the
75
+ Work and such Derivative Works in Source or Object form.
76
+
77
+ 3. Grant of Patent License. Subject to the terms and conditions of
78
+ this License, each Contributor hereby grants to You a perpetual,
79
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
80
+ (except as stated in this section) patent license to make, have made,
81
+ use, offer to sell, sell, import, and otherwise transfer the Work,
82
+ where such license applies only to those patent claims licensable
83
+ by such Contributor that are necessarily infringed by their
84
+ Contribution(s) alone or by combination of their Contribution(s)
85
+ with the Work to which such Contribution(s) was submitted. If You
86
+ institute patent litigation against any entity (including a
87
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
88
+ or a Contribution incorporated within the Work constitutes direct
89
+ or contributory patent infringement, then any patent licenses
90
+ granted to You under this License for that Work shall terminate
91
+ as of the date such litigation is filed.
92
+
93
+ 4. Redistribution. You may reproduce and distribute copies of the
94
+ Work or Derivative Works thereof in any medium, with or without
95
+ modifications, and in Source or Object form, provided that You
96
+ meet the following conditions:
97
+
98
+ (a) You must give any other recipients of the Work or
99
+ Derivative Works a copy of this License; and
100
+
101
+ (b) You must cause any modified files to carry prominent notices
102
+ stating that You changed the files; and
103
+
104
+ (c) You must retain, in the Source form of any Derivative Works
105
+ that You distribute, all copyright, patent, trademark, and
106
+ attribution notices from the Source form of the Work,
107
+ excluding those notices that do not pertain to any part of
108
+ the Derivative Works; and
109
+
110
+ (d) If the Work includes a "NOTICE" text file as part of its
111
+ distribution, then any Derivative Works that You distribute must
112
+ include a readable copy of the attribution notices contained
113
+ within such NOTICE file, excluding those notices that do not
114
+ pertain to any part of the Derivative Works, in at least one
115
+ of the following places: within a NOTICE text file distributed
116
+ as part of the Derivative Works; within the Source form or
117
+ documentation, if provided along with the Derivative Works; or,
118
+ within a display generated by the Derivative Works, if and
119
+ wherever such third-party notices normally appear. The contents
120
+ of the NOTICE file are for informational purposes only and
121
+ do not modify the License. You may add Your own attribution
122
+ notices within Derivative Works that You distribute, alongside
123
+ or as an addendum to the NOTICE text from the Work, provided
124
+ that such additional attribution notices cannot be construed
125
+ as modifying the License.
126
+
127
+ You may add Your own copyright statement to Your modifications and
128
+ may provide additional or different license terms and conditions
129
+ for use, reproduction, or distribution of Your modifications, or
130
+ for any such Derivative Works as a whole, provided Your use,
131
+ reproduction, and distribution of the Work otherwise complies with
132
+ the conditions stated in this License.
133
+
134
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
135
+ any Contribution intentionally submitted for inclusion in the Work
136
+ by You to the Licensor shall be under the terms and conditions of
137
+ this License, without any additional terms or conditions.
138
+ Notwithstanding the above, nothing herein shall supersede or modify
139
+ the terms of any separate license agreement you may have executed
140
+ with Licensor regarding such Contributions.
141
+
142
+ 6. Trademarks. This License does not grant permission to use the trade
143
+ names, trademarks, service marks, or product names of the Licensor,
144
+ except as required for reasonable and customary use in describing the
145
+ origin of the Work and reproducing the content of the NOTICE file.
146
+
147
+ 7. Disclaimer of Warranty. Unless required by applicable law or
148
+ agreed to in writing, Licensor provides the Work (and each
149
+ Contributor provides its Contributions) on an "AS IS" BASIS,
150
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
151
+ implied, including, without limitation, any warranties or conditions
152
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
153
+ PARTICULAR PURPOSE. You are solely responsible for determining the
154
+ appropriateness of using or redistributing the Work and assume any
155
+ risks associated with Your exercise of permissions under this License.
156
+
157
+ 8. Limitation of Liability. In no event and under no legal theory,
158
+ whether in tort (including negligence), contract, or otherwise,
159
+ unless required by applicable law (such as deliberate and grossly
160
+ negligent acts) or agreed to in writing, shall any Contributor be
161
+ liable to You for damages, including any direct, indirect, special,
162
+ incidental, or consequential damages of any character arising as a
163
+ result of this License or out of the use or inability to use the
164
+ Work (including but not limited to damages for loss of goodwill,
165
+ work stoppage, computer failure or malfunction, or any and all
166
+ other commercial damages or losses), even if such Contributor
167
+ has been advised of the possibility of such damages.
168
+
169
+ 9. Accepting Warranty or Additional Liability. While redistributing
170
+ the Work or Derivative Works thereof, You may choose to offer,
171
+ and charge a fee for, acceptance of support, warranty, indemnity,
172
+ or other liability obligations and/or rights consistent with this
173
+ License. However, in accepting such obligations, You may act only
174
+ on Your own behalf and on Your sole responsibility, not on behalf
175
+ of any other Contributor, and only if You agree to indemnify,
176
+ defend, and hold each Contributor harmless for any liability
177
+ incurred by, or claims asserted against, such Contributor by reason
178
+ of your accepting any such warranty or additional liability.
data/README.md CHANGED
@@ -3,7 +3,8 @@ Ruby Openstack Keystone Client
3
3
 
4
4
  ## Description
5
5
 
6
- This is a client for the OpenStack Keystone/Glance/Nova API. There's a Ruby API.
6
+ This is a client for the OpenStack Keystone API. There's a Ruby API.
7
+ Porting from [python-keystoneclient](https://github.com/openstack/python-keystoneclient).
7
8
 
8
9
  ## Keystone API
9
10
 
@@ -1,5 +1,6 @@
1
1
  require 'openstack-client'
2
2
  require 'openstack-client/service_catalog'
3
+ require 'keystone/v2_0/tenants'
3
4
  require 'keystone/v2_0/tokens'
4
5
  require 'keystone/v2_0/ec2'
5
6
 
@@ -30,18 +31,17 @@ class Keystone::V2_0::Client < ::Openstack::Client
30
31
 
31
32
  # Creates a new Keystone::V2_0::Client object.
32
33
  #
33
- # The constructor takes a hash of options, including:
34
- #
35
- # :username - Your Openstack username (optional)
36
- # :password - Your Openstack password (optional)
37
- # :tenant_id - Your Openstack tenantId (optional)
38
- # :tenant_name - Your Openstack tenantName (optional)
39
- # :auth_url - Keystone service endpoint for authorization.
40
- # :region_name - The specific service region to use. Defaults to first returned region.
41
- # :token - Whether to retry if your auth token expires (defaults to true)
42
- # :endpoint - A user-supplied endpoint URL for the keystone
43
- # service. Lazy-authentication is possible for API
44
- # service calls if endpoint is set at instantiation.(optional)
34
+ # @param [Hash] options
35
+ # @option options [String] :username Your Openstack username (optional)
36
+ # @option options [String] :password Your Openstack password (optional)
37
+ # @option options [String] :tenant_id Your Openstack tenantId (optional)
38
+ # @option options [String] :tenant_name Your Openstack tenantName (optional)
39
+ # @option options [String] :auth_url Keystone service endpoint for authorization.
40
+ # @option options [String] :region_name The specific service region to use. Defaults to first returned region.
41
+ # @option options [String] :token Whether to retry if your auth token expires (defaults to true)
42
+ # @option options [String] :endpoint A user-supplied endpoint URL for the keystone
43
+ # service. Lazy-authentication is possible for API
44
+ # service calls if endpoint is set at instantiation.(optional)
45
45
  #
46
46
  def initialize options={}
47
47
  self.username = options[:username]
@@ -55,7 +55,7 @@ class Keystone::V2_0::Client < ::Openstack::Client
55
55
 
56
56
  # self.roles = roles.RoleManager(self)
57
57
  # self.services = services.ServiceManager(self)
58
- # self.tenants = tenants.TenantManager(self)
58
+ self.tenants = Keystone::V2_0::TenantManager.new(self)
59
59
  self.tokens = Keystone::V2_0::TokenManager.new(self)
60
60
  # self.users = users.UserManager(self)
61
61
 
@@ -77,7 +77,7 @@ class Keystone::V2_0::Client < ::Openstack::Client
77
77
  # then the resulting authenticated client will be scoped to that
78
78
  # tenant and contain a service catalog of available endpoints.
79
79
  #
80
- # Returns ``true`` if authentication was successful.
80
+ # @return [boolean] if authentication was successful returns true.
81
81
  def authenticate
82
82
  self.management_url = self.auth_url
83
83
  raw_token = self.tokens.authenticate(
@@ -96,10 +96,14 @@ class Keystone::V2_0::Client < ::Openstack::Client
96
96
  def _extract_service_catalog url, body
97
97
  self.service_catalog = Openstack::Client::ServiceCatalog.new(body)
98
98
  self.auth_token = self.service_catalog.token['id']
99
- self.management_url = self.service_catalog.url_for(
99
+ begin
100
+ self.management_url = self.service_catalog.url_for(
100
101
  attribute: 'region',
101
102
  filter_value: self.region_name,
102
103
  endpoint_type: 'adminURL'
103
104
  )
105
+ rescue
106
+ # logger.info 'identity endpoint Not Found'
107
+ end
104
108
  end
105
109
  end
@@ -0,0 +1,33 @@
1
+ require 'openstack-client/base'
2
+
3
+ module Keystone
4
+ module V2_0
5
+ end
6
+ end
7
+
8
+ class Keystone::V2_0::Tenant < Openstack::Client::Resource
9
+ def initialize manager, info, loaded=nil
10
+ super
11
+ end
12
+ end
13
+
14
+ class Keystone::V2_0::TenantManager < Openstack::Client::Manager
15
+ RESOURCE_CLASS = Keystone::V2_0::Tenant
16
+
17
+ def initialize api
18
+ super
19
+ end
20
+
21
+ def get tenant
22
+ self._get("/tenants/#{get_id(tenant)}", 'tenant')
23
+ end
24
+
25
+ def list limit=nil, marker=nil
26
+ params = {}
27
+ params['limit'] = limit if limit
28
+ params['marker'] = marker if marker
29
+
30
+ self._list(url_with_params("/tenants", params), 'tenants')
31
+ end
32
+
33
+ end
@@ -2,59 +2,58 @@ require 'openstack-client/base'
2
2
 
3
3
  module Keystone
4
4
  module V2_0
5
+ end
6
+ end
5
7
 
6
- class Token < Openstack::Client::Resource
7
- def initialize manager, info, loaded=nil
8
- super
9
- end
10
- end
8
+ class Keystone::V2_0::Token < Openstack::Client::Resource
9
+ def initialize manager, info, loaded=nil
10
+ super
11
+ end
12
+ end
13
+
14
+ class Keystone::V2_0::TokenManager < Openstack::Client::Manager
15
+ RESOURCE_CLASS = Keystone::V2_0::Token
16
+
17
+ def initialize api
18
+ super
19
+ end
11
20
 
12
- class TokenManager < Openstack::Client::Manager
13
- RESOURCE_CLASS = Token
14
-
15
- def initialize api
16
- super
17
- end
18
-
19
- # options:
20
- # :username
21
- # :tenant_id
22
- # :tenant_name
23
- # :password
24
- # :token
25
- # :return_raw
26
- def authenticate options
27
- if options[:token]
28
- params = { 'auth' => { 'token' => { 'id' => options[:token] } } }
29
- elsif options[:username] and options[:password]
30
- params = {
31
- 'auth' => {
32
- 'passwordCredentials' => {
33
- 'username' => options[:username],
34
- 'password' => options[:password]
35
- }}}
36
- else
37
- raise 'A username and password or token is required.'
38
- end
39
-
40
- if options[:tenant_id]
41
- params['auth']['tenantId'] = options[:tenant_id]
42
- elsif options[:tenant_name]
43
- params['auth']['tenantName'] = options[:tenant_name]
44
- end
45
-
46
- return self._create('/tokens', params, 'access', options[:return_raw])
47
- end
48
-
49
- def delete token
50
- self._delete("/tokens/#{token.id}")
51
- end
52
-
53
- def endpoints token
54
- self._get("/tokens/#{token.id}/endpoints", 'token')
55
- end
21
+ # @param [Hash] options
22
+ # @option options [String] :username
23
+ # @option options [String] :tenant_id
24
+ # @option options [String] :tenant_name
25
+ # @option options [String] :password
26
+ # @option options [String] :token
27
+ # @option options [String] :return_raw
28
+ def authenticate options
29
+ if options[:token]
30
+ params = { 'auth' => { 'token' => { 'id' => options[:token] } } }
31
+ elsif options[:username] and options[:password]
32
+ params = {
33
+ 'auth' => {
34
+ 'passwordCredentials' => {
35
+ 'username' => options[:username],
36
+ 'password' => options[:password]
37
+ }}}
38
+ else
39
+ raise 'A username and password or token is required.'
40
+ end
56
41
 
42
+ if options[:tenant_id]
43
+ params['auth']['tenantId'] = options[:tenant_id]
44
+ elsif options[:tenant_name]
45
+ params['auth']['tenantName'] = options[:tenant_name]
57
46
  end
58
47
 
48
+ return self._create('/tokens', params, 'access', options[:return_raw])
49
+ end
50
+
51
+ def delete token
52
+ self._delete("/tokens/#{token.id}")
59
53
  end
54
+
55
+ def endpoints token
56
+ self._get("/tokens/#{token.id}/endpoints", 'token')
57
+ end
58
+
60
59
  end
@@ -1,5 +1,5 @@
1
1
  module Keystone
2
2
  class Client
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
@@ -14,6 +14,7 @@ class Openstack::Client::ServiceCatalog
14
14
  end
15
15
 
16
16
  # Fetch token details fron service catalog
17
+ # @return [Hash] token
17
18
  def token
18
19
  unless defined?(@token)
19
20
  @token = {
@@ -32,6 +33,12 @@ class Openstack::Client::ServiceCatalog
32
33
  # the first endpoint of the specified type.
33
34
  #
34
35
  # See tests for a sample service catalog.
36
+ #
37
+ # @param [Hash] options
38
+ # @option options [String] :service_type service type for url. (Default 'identity')
39
+ # @option options [String] :endpoint_type endpoint_type for url. (Default 'publicURL')
40
+ # @option options [String] :attribute attribute for filter.
41
+ # @option options [String] :filter_value filter_value for url.
35
42
  def url_for options={}
36
43
  service_type = options[:service_type] || 'identity'
37
44
  endpoint_type = options[:endpoint_type] || 'publicURL'
@@ -6,7 +6,7 @@ Gem::Specification.new do |gem|
6
6
  gem.email = ["yuanying@fraction.jp", "atoato88@gmail.com"]
7
7
  gem.description = %q{OpenStack Keystone client for Ruby.}
8
8
  gem.summary = %q{This is a client for the OpenStack Keystone API. There's a Ruby API.}
9
- gem.homepage = "https://github.com/yuanying/ruby-openstack-keystone-client"
9
+ gem.homepage = "https://github.com/nec-soft/ruby-openstack-keystone-client"
10
10
 
11
11
  gem.files = `git ls-files`.split($\)
12
12
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openstack-keystone-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-03-29 00:00:00.000000000Z
13
+ date: 2013-04-01 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
17
- requirement: &70297282418740 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,15 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *70297282418740
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: rspec
28
- requirement: &70297282417420 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ! '>='
@@ -33,10 +38,15 @@ dependencies:
33
38
  version: '0'
34
39
  type: :development
35
40
  prerelease: false
36
- version_requirements: *70297282417420
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
37
47
  - !ruby/object:Gem::Dependency
38
48
  name: webmock
39
- requirement: &70297282416120 !ruby/object:Gem::Requirement
49
+ requirement: !ruby/object:Gem::Requirement
40
50
  none: false
41
51
  requirements:
42
52
  - - ! '>='
@@ -44,10 +54,15 @@ dependencies:
44
54
  version: '0'
45
55
  type: :development
46
56
  prerelease: false
47
- version_requirements: *70297282416120
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
48
63
  - !ruby/object:Gem::Dependency
49
64
  name: activesupport
50
- requirement: &70297282414940 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
51
66
  none: false
52
67
  requirements:
53
68
  - - ! '>='
@@ -55,10 +70,15 @@ dependencies:
55
70
  version: '0'
56
71
  type: :development
57
72
  prerelease: false
58
- version_requirements: *70297282414940
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
59
79
  - !ruby/object:Gem::Dependency
60
80
  name: simplecov-rcov
61
- requirement: &70297282414160 !ruby/object:Gem::Requirement
81
+ requirement: !ruby/object:Gem::Requirement
62
82
  none: false
63
83
  requirements:
64
84
  - - ! '>='
@@ -66,10 +86,15 @@ dependencies:
66
86
  version: '0'
67
87
  type: :development
68
88
  prerelease: false
69
- version_requirements: *70297282414160
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
70
95
  - !ruby/object:Gem::Dependency
71
96
  name: rest-client
72
- requirement: &70297282412940 !ruby/object:Gem::Requirement
97
+ requirement: !ruby/object:Gem::Requirement
73
98
  none: false
74
99
  requirements:
75
100
  - - ! '>='
@@ -77,7 +102,12 @@ dependencies:
77
102
  version: '0'
78
103
  type: :runtime
79
104
  prerelease: false
80
- version_requirements: *70297282412940
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
81
111
  description: OpenStack Keystone client for Ruby.
82
112
  email:
83
113
  - yuanying@fraction.jp
@@ -94,6 +124,7 @@ files:
94
124
  - Rakefile
95
125
  - lib/keystone/v2_0/client.rb
96
126
  - lib/keystone/v2_0/ec2.rb
127
+ - lib/keystone/v2_0/tenants.rb
97
128
  - lib/keystone/v2_0/tokens.rb
98
129
  - lib/keystone/version.rb
99
130
  - lib/openstack-client.rb
@@ -108,7 +139,7 @@ files:
108
139
  - spec/openstack-client/service_catalog_spec.rb
109
140
  - spec/openstack-client_spec.rb
110
141
  - spec/spec_helper.rb
111
- homepage: https://github.com/yuanying/ruby-openstack-keystone-client
142
+ homepage: https://github.com/nec-soft/ruby-openstack-keystone-client
112
143
  licenses: []
113
144
  post_install_message:
114
145
  rdoc_options: []
@@ -122,7 +153,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
122
153
  version: '0'
123
154
  segments:
124
155
  - 0
125
- hash: -3300449888302740402
156
+ hash: -2869047404017589983
126
157
  required_rubygems_version: !ruby/object:Gem::Requirement
127
158
  none: false
128
159
  requirements:
@@ -131,10 +162,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
162
  version: '0'
132
163
  segments:
133
164
  - 0
134
- hash: -3300449888302740402
165
+ hash: -2869047404017589983
135
166
  requirements: []
136
167
  rubyforge_project:
137
- rubygems_version: 1.8.10
168
+ rubygems_version: 1.8.23
138
169
  signing_key:
139
170
  specification_version: 3
140
171
  summary: This is a client for the OpenStack Keystone API. There's a Ruby API.