yao 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -3
- data/lib/yao/auth.rb +1 -1
- data/lib/yao/client.rb +1 -2
- data/lib/yao/faraday_middlewares.rb +2 -2
- data/lib/yao/resources/role_assignment.rb +17 -0
- data/lib/yao/resources.rb +1 -0
- data/lib/yao/token.rb +9 -7
- data/lib/yao/version.rb +1 -1
- data/test/support/auth_stub.rb +30 -2
- data/test/yao/test_auth.rb +19 -5
- data/test/yao/test_read_only.rb +3 -3
- data/test/yao/test_token.rb +3 -3
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9cb896f2250772f6580f028bb2dc529c962cbaec
|
4
|
+
data.tar.gz: 897adb236fd643b44fb04cbbfee42f33d6585f7c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d61e5b8f00624660f4fc2f2cf565d2ff61251b1dc7a7ab0b00a666337cf7f4b621b107e45bc3ca617ce12777174c6f62e21ccde194414acf348f46a97dcb48e
|
7
|
+
data.tar.gz: e5ec0f64e49552af51df369edb40f60157bdfc9013f144c4cb3eff654980186085c6efc896fc170532fa27991adacd8b1318b62f3befe34a125c48b16f501252
|
data/README.md
CHANGED
@@ -26,7 +26,7 @@ Or install it yourself as:
|
|
26
26
|
require 'yao'
|
27
27
|
|
28
28
|
Yao.configure do
|
29
|
-
auth_url "http://keystone.example.local:8080/v2.0
|
29
|
+
auth_url "http://keystone.example.local:8080/v2.0"
|
30
30
|
tenant_name "fooproject"
|
31
31
|
username "udzura"
|
32
32
|
password "tonk0tsu-r@men"
|
@@ -47,7 +47,7 @@ If you want to override some of endpoints by service, you can do:
|
|
47
47
|
|
48
48
|
```ruby
|
49
49
|
Yao.configure do
|
50
|
-
auth_url "http://endpoint.example.com:12345"
|
50
|
+
auth_url "http://endpoint.example.com:12345/v2.0"
|
51
51
|
tenant_name "example"
|
52
52
|
username "udzura"
|
53
53
|
password "XXXXXXXX"
|
@@ -70,7 +70,7 @@ You can use a prittier namespace:
|
|
70
70
|
require 'yao/is_openstack_client'
|
71
71
|
|
72
72
|
OpenStack.configure do
|
73
|
-
auth_url "http://keystone.example.local:8080/v2.0
|
73
|
+
auth_url "http://keystone.example.local:8080/v2.0"
|
74
74
|
tenant_name "fooproject"
|
75
75
|
username "udzura"
|
76
76
|
password "tonk0tsu-r@men"
|
data/lib/yao/auth.rb
CHANGED
data/lib/yao/client.rb
CHANGED
@@ -28,8 +28,7 @@ module Yao
|
|
28
28
|
# XXX: neutron just have v2.0 API and endpoint may not have version prefix
|
29
29
|
if type == "network"
|
30
30
|
urls = urls.map {|public_or_admin, url|
|
31
|
-
|
32
|
-
url = (path == '' || path == '/') ? File.join(url, "v2.0") : url
|
31
|
+
url = File.join(url, "v2.0")
|
33
32
|
[public_or_admin, url]
|
34
33
|
}.to_h
|
35
34
|
end
|
@@ -22,7 +22,7 @@ class Faraday::Request::OSToken
|
|
22
22
|
|
23
23
|
def call(env)
|
24
24
|
if @token.expired?
|
25
|
-
@token.
|
25
|
+
@token.refresh(Yao.default_client.default)
|
26
26
|
end
|
27
27
|
|
28
28
|
env[:request_headers]['X-Auth-Token'] = @token.to_s
|
@@ -51,7 +51,7 @@ class Faraday::Request::ReadOnly
|
|
51
51
|
private
|
52
52
|
|
53
53
|
ALLOWED_REQUESTS = [
|
54
|
-
{method: :post, path: "/
|
54
|
+
{method: :post, path: "/tokens"}
|
55
55
|
]
|
56
56
|
|
57
57
|
def allowed_request?(env)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Yao::Resources
|
2
|
+
class RoleAssignment < Base
|
3
|
+
friendly_attributes :scope, :role, :user
|
4
|
+
self.service = "identity"
|
5
|
+
self.resource_name = "role_assignment"
|
6
|
+
self.resources_name = "role_assignments"
|
7
|
+
self.admin = true
|
8
|
+
self.api_version = "v3"
|
9
|
+
|
10
|
+
def project
|
11
|
+
@project ||= Yao::Tenant.get(scope["project"]["id"])
|
12
|
+
end
|
13
|
+
|
14
|
+
map_attribute_to_resource :role => Role
|
15
|
+
map_attribute_to_resource :user => User
|
16
|
+
end
|
17
|
+
end
|
data/lib/yao/resources.rb
CHANGED
@@ -18,6 +18,7 @@ module Yao
|
|
18
18
|
autoload :Host, "yao/resources/host"
|
19
19
|
autoload :User, "yao/resources/user"
|
20
20
|
autoload :Role, "yao/resources/role"
|
21
|
+
autoload :RoleAssignment, "yao/resources/role_assignment"
|
21
22
|
|
22
23
|
autoload :Resource, "yao/resources/resource"
|
23
24
|
autoload :Meter, "yao/resources/meter"
|
data/lib/yao/token.rb
CHANGED
@@ -4,7 +4,7 @@ module Yao
|
|
4
4
|
class Token
|
5
5
|
def self.issue(cli, auth_info)
|
6
6
|
t = new(auth_info)
|
7
|
-
t.
|
7
|
+
t.refresh(cli)
|
8
8
|
t
|
9
9
|
end
|
10
10
|
|
@@ -29,10 +29,10 @@ module Yao
|
|
29
29
|
Time.now >= self.expire_at
|
30
30
|
end
|
31
31
|
|
32
|
-
def
|
32
|
+
def refresh(cli)
|
33
33
|
@endpoints.clear
|
34
34
|
|
35
|
-
res = cli.post(
|
35
|
+
res = cli.post("#{Yao.config.auth_url}/tokens") do |req|
|
36
36
|
req.body = auth_info.to_json
|
37
37
|
req.headers['Content-Type'] = 'application/json'
|
38
38
|
end
|
@@ -48,11 +48,13 @@ module Yao
|
|
48
48
|
|
49
49
|
_endpoints.each do |endpoint_data|
|
50
50
|
type = endpoint_data["type"]
|
51
|
-
|
51
|
+
region_name = Yao.config.region_name ? Yao.config.region_name : 'RegionOne'
|
52
|
+
endpoint = endpoint_data["endpoints"].find { |ep| ep.has_value?(region_name) }
|
52
53
|
urls = {}
|
53
|
-
|
54
|
-
|
55
|
-
|
54
|
+
if endpoint
|
55
|
+
urls[:public_url] = endpoint["publicURL"] if endpoint["publicURL"]
|
56
|
+
urls[:admin_url] = endpoint["adminURL"] if endpoint["adminURL"]
|
57
|
+
end
|
56
58
|
@endpoints[type] = urls
|
57
59
|
end
|
58
60
|
|
data/lib/yao/version.rb
CHANGED
data/test/support/auth_stub.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module AuthStub
|
2
2
|
def stub_auth_request(auth_url, username, password, tenant)
|
3
|
-
stub_request(:post, "#{auth_url}/
|
3
|
+
stub_request(:post, "#{auth_url}/tokens")
|
4
4
|
.with(
|
5
5
|
body: auth_json(username, password, tenant)
|
6
6
|
).to_return(
|
@@ -44,6 +44,13 @@ module AuthStub
|
|
44
44
|
"internalURL": "http://nova-endpoint.example.com:8774/v2/b598bf98671c47e1b955f8c9660e3c44",
|
45
45
|
"id": "1a66e6af97c440b2a7bbc4f9735923d9",
|
46
46
|
"publicURL": "http://nova-endpoint.example.com:8774/v2/b598bf98671c47e1b955f8c9660e3c44"
|
47
|
+
},
|
48
|
+
{
|
49
|
+
"adminURL": "https://global-endpoint.example.com/api/nova/b598bf98671c47e1b955f8c9660e3c44",
|
50
|
+
"region": "RegionTest",
|
51
|
+
"internalURL": "http://192.168.10.52:8774/v2/b598bf98671c47e1b955f8c9660e3c44",
|
52
|
+
"id": "18df07456cda4af1a7031f0de68637ea",
|
53
|
+
"publicURL": "https://global-endpoint.example.com/api/nova/b598bf98671c47e1b955f8c9660e3c44"
|
47
54
|
}
|
48
55
|
],
|
49
56
|
"endpoints_links": [],
|
@@ -58,6 +65,13 @@ module AuthStub
|
|
58
65
|
"internalURL": "http://neutron-endpoint.example.com:9696/",
|
59
66
|
"id": "0418104da877468ca65d739142fa3454",
|
60
67
|
"publicURL": "http://neutron-endpoint.example.com:9696/"
|
68
|
+
},
|
69
|
+
{
|
70
|
+
"adminURL": "https://global-endpoint.example.com/api/neutron/",
|
71
|
+
"region": "RegionTest",
|
72
|
+
"internalURL": "http://192.168.10.53:9696/",
|
73
|
+
"id": "5e5cf4ffecfa4ce1a956fe517baf3154",
|
74
|
+
"publicURL": "https://global-endpoint.example.com/api/neutron/"
|
61
75
|
}
|
62
76
|
],
|
63
77
|
"endpoints_links": [],
|
@@ -72,6 +86,13 @@ module AuthStub
|
|
72
86
|
"internalURL": "http://glance-endpoint.example.com:9292",
|
73
87
|
"id": "246f33509ff64802b86eb081307ecec0",
|
74
88
|
"publicURL": "http://glance-endpoint.example.com:9292"
|
89
|
+
},
|
90
|
+
{
|
91
|
+
"adminURL": "https://global-endpoint.example.com/api/glance/",
|
92
|
+
"region": "RegionTest",
|
93
|
+
"internalURL": "http://192.168.10.54:9292/",
|
94
|
+
"id": "62d6f676ff0c491e9671a7ab6a596493",
|
95
|
+
"publicURL": "https://global-endpoint.example.com/api/glance/"
|
75
96
|
}
|
76
97
|
],
|
77
98
|
"endpoints_links": [],
|
@@ -81,11 +102,18 @@ module AuthStub
|
|
81
102
|
{
|
82
103
|
"endpoints": [
|
83
104
|
{
|
84
|
-
"adminURL": "#{auth_url}
|
105
|
+
"adminURL": "#{auth_url}",
|
85
106
|
"region": "RegionOne",
|
86
107
|
"internalURL": "http://endpoint.example.com:5000/v2.0",
|
87
108
|
"id": "2b982236cc084128bf42b647c1b7fb49",
|
88
109
|
"publicURL": "http://endpoint.example.com:5000/v2.0"
|
110
|
+
},
|
111
|
+
{
|
112
|
+
"adminURL": "https://global-endpoint.example.com/api/admin/keystone/",
|
113
|
+
"region": "RegionTest",
|
114
|
+
"internalURL": "http://192.168.10.52:35357/v2.0",
|
115
|
+
"id": "11ae249e090d4b548ae992c08ea3b35a",
|
116
|
+
"publicURL": "https://global-endpoint.example.com/api/keystone/"
|
89
117
|
}
|
90
118
|
],
|
91
119
|
"endpoints_links": [],
|
data/test/yao/test_auth.rb
CHANGED
@@ -2,7 +2,7 @@ class TestAuth < Test::Unit::TestCase
|
|
2
2
|
include AuthStub
|
3
3
|
|
4
4
|
def setup
|
5
|
-
@auth_url = "http://endpoint.example.com:12345"
|
5
|
+
@auth_url = "http://endpoint.example.com:12345/v2.0"
|
6
6
|
username = "udzura"
|
7
7
|
tenant = "example"
|
8
8
|
password = "XXXXXXXX"
|
@@ -21,7 +21,7 @@ class TestAuth < Test::Unit::TestCase
|
|
21
21
|
|
22
22
|
def test_auth_successful
|
23
23
|
cli = Yao.default_client.pool["default"]
|
24
|
-
assert { cli.url_prefix.to_s == "http://endpoint.example.com:12345/" }
|
24
|
+
assert { cli.url_prefix.to_s == "http://endpoint.example.com:12345/v2.0" }
|
25
25
|
end
|
26
26
|
|
27
27
|
def test_service_sclients_initialized
|
@@ -53,7 +53,7 @@ class TestAuth < Test::Unit::TestCase
|
|
53
53
|
stub(auth).new
|
54
54
|
|
55
55
|
Yao.configure do
|
56
|
-
auth_url "http://endpoint.example.com:12345"
|
56
|
+
auth_url "http://endpoint.example.com:12345/v2.0"
|
57
57
|
tenant_name "example"
|
58
58
|
username "udzura"
|
59
59
|
password "XXXXXXXX"
|
@@ -63,14 +63,28 @@ class TestAuth < Test::Unit::TestCase
|
|
63
63
|
|
64
64
|
def test_override_endpoint
|
65
65
|
Yao.configure do
|
66
|
-
auth_url "http://endpoint.example.com:12345"
|
66
|
+
auth_url "http://endpoint.example.com:12345/v2.0"
|
67
67
|
tenant_name "example"
|
68
68
|
username "udzura"
|
69
69
|
password "XXXXXXXX"
|
70
70
|
endpoints ({ identity: { public: "http://override-endpoint.example.com:35357/v3.0" } })
|
71
71
|
end
|
72
|
-
assert
|
72
|
+
assert { Yao.default_client.pool["identity"].url_prefix.to_s == "http://override-endpoint.example.com:35357/v3.0" }
|
73
73
|
end
|
74
74
|
|
75
|
+
def test_region
|
76
|
+
Yao.configure do
|
77
|
+
auth_url "http://endpoint.example.com:12345/v2.0"
|
78
|
+
tenant_name "example"
|
79
|
+
username "udzura"
|
80
|
+
password "XXXXXXXX"
|
81
|
+
region_name "RegionTest"
|
82
|
+
end
|
83
|
+
assert { Yao.default_client.pool["identity"].url_prefix.to_s == "https://global-endpoint.example.com/api/keystone/" }
|
84
|
+
ensure
|
85
|
+
Yao.configure do
|
86
|
+
region_name "RegionOne"
|
87
|
+
end
|
88
|
+
end
|
75
89
|
|
76
90
|
end
|
data/test/yao/test_read_only.rb
CHANGED
@@ -2,7 +2,7 @@ class TestOnly < Test::Unit::TestCase
|
|
2
2
|
include AuthStub
|
3
3
|
|
4
4
|
def setup
|
5
|
-
auth_url = "http://endpoint.example.com:12345"
|
5
|
+
auth_url = "http://endpoint.example.com:12345/v2.0"
|
6
6
|
username = "udzura"
|
7
7
|
tenant = "example"
|
8
8
|
password = "XXXXXXXX"
|
@@ -17,8 +17,8 @@ class TestOnly < Test::Unit::TestCase
|
|
17
17
|
end
|
18
18
|
|
19
19
|
@username = username
|
20
|
-
@get_stub = stub_request(:get, "#{auth_url}/
|
21
|
-
@post_stub = stub_request(:post, "#{auth_url}/
|
20
|
+
@get_stub = stub_request(:get, "#{auth_url}/users?name=#{username}")
|
21
|
+
@post_stub = stub_request(:post, "#{auth_url}/users")
|
22
22
|
end
|
23
23
|
|
24
24
|
def test_read_only
|
data/test/yao/test_token.rb
CHANGED
@@ -30,8 +30,8 @@ class TestToken < Test::Unit::TestCase
|
|
30
30
|
assert { ! t.expired? }
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
34
|
-
auth_url = "http://endpoint.example.com:12345"
|
33
|
+
def test_refresh
|
34
|
+
auth_url = "http://endpoint.example.com:12345/v2.0"
|
35
35
|
username = "udzura"
|
36
36
|
tenant = "example"
|
37
37
|
password = "XXXXXXXX"
|
@@ -58,7 +58,7 @@ class TestToken < Test::Unit::TestCase
|
|
58
58
|
stub_auth_request(auth_url, username, password, tenant)
|
59
59
|
|
60
60
|
Yao.config.auth_url auth_url
|
61
|
-
t.
|
61
|
+
t.refresh(Yao.default_client.default)
|
62
62
|
|
63
63
|
assert { t.token == "aaaa166533fd49f3b11b1cdce2430000" }
|
64
64
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yao
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Uchio, KONDO
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-05-
|
11
|
+
date: 2017-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -193,6 +193,7 @@ files:
|
|
193
193
|
- lib/yao/resources/resource.rb
|
194
194
|
- lib/yao/resources/restfully_accessible.rb
|
195
195
|
- lib/yao/resources/role.rb
|
196
|
+
- lib/yao/resources/role_assignment.rb
|
196
197
|
- lib/yao/resources/router.rb
|
197
198
|
- lib/yao/resources/sample.rb
|
198
199
|
- lib/yao/resources/security_group.rb
|
@@ -241,7 +242,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
241
242
|
version: '0'
|
242
243
|
requirements: []
|
243
244
|
rubyforge_project:
|
244
|
-
rubygems_version: 2.
|
245
|
+
rubygems_version: 2.6.8
|
245
246
|
signing_key:
|
246
247
|
specification_version: 4
|
247
248
|
summary: Yet Another OpenStack API Wrapper that rocks!!
|