leofs_manager_client 0.2.7 → 0.2.8
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.
- data/lib/leofs_manager_client/leofs_manager_models.rb +10 -0
- data/lib/leofs_manager_client.rb +15 -7
- data/spec/dummy_tcp_server.rb +143 -0
- data/spec/leofs_manager_client_spec.rb +29 -140
- metadata +4 -2
@@ -121,6 +121,16 @@ module LeoFSManager
|
|
121
121
|
end
|
122
122
|
end
|
123
123
|
|
124
|
+
class User
|
125
|
+
attr_reader :user_id, :access_key_id, :created_at
|
126
|
+
|
127
|
+
def initialize(h)
|
128
|
+
@user_id = h[:user_id]
|
129
|
+
@access_key_id = h[:access_key_id]
|
130
|
+
@created_at = h[:created_at]
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
124
134
|
# Endpoint
|
125
135
|
class Endpoint
|
126
136
|
# host of the endpoint
|
data/lib/leofs_manager_client.rb
CHANGED
@@ -26,7 +26,7 @@ require "time"
|
|
26
26
|
require_relative "leofs_manager_client/leofs_manager_models"
|
27
27
|
|
28
28
|
module LeoFSManager
|
29
|
-
VERSION = "0.2.
|
29
|
+
VERSION = "0.2.8"
|
30
30
|
|
31
31
|
class Client
|
32
32
|
CMD_VERSION = "version"
|
@@ -40,7 +40,8 @@ module LeoFSManager
|
|
40
40
|
CMD_DU = "du %s"
|
41
41
|
CMD_COMPACT = "compact %s"
|
42
42
|
CMD_PURGE = "purge %s"
|
43
|
-
|
43
|
+
CMD_S3_CRE_KEY = "s3-create-key %s"
|
44
|
+
CMD_S3_GET_KEYS = "s3-get-keys"
|
44
45
|
CMD_S3_SET_ENDPOINT = "s3-set-endpoint %s"
|
45
46
|
CMD_S3_DEL_ENDPOINT = "s3-delete-endpoint %s"
|
46
47
|
CMD_S3_GET_ENDPOINTS = "s3-get-endpoints"
|
@@ -153,8 +154,14 @@ module LeoFSManager
|
|
153
154
|
# Generate credential for LeoFS
|
154
155
|
# Return::
|
155
156
|
# Credential
|
156
|
-
def
|
157
|
-
Credential.new(sender(
|
157
|
+
def s3_create_key(user_id)
|
158
|
+
Credential.new(sender(CMD_S3_CRE_KEY % user_id))
|
159
|
+
end
|
160
|
+
alias s3_gen_key s3_create_key
|
161
|
+
|
162
|
+
def s3_get_keys
|
163
|
+
users = sender(CMD_S3_GET_KEYS)[:users]
|
164
|
+
users.map {|account| User.new(account) }
|
158
165
|
end
|
159
166
|
|
160
167
|
# Insert an endpoint in the system
|
@@ -269,7 +276,7 @@ module LeoFSManager
|
|
269
276
|
response = nil
|
270
277
|
begin
|
271
278
|
@mutex.synchronize do
|
272
|
-
@socket.
|
279
|
+
@socket.print "#{command}\r\n"
|
273
280
|
response = JSON.parse(@socket.readline, symbolize_names: true)
|
274
281
|
end
|
275
282
|
rescue EOFError => ex
|
@@ -277,9 +284,10 @@ module LeoFSManager
|
|
277
284
|
reconnect
|
278
285
|
rescue => ex
|
279
286
|
raise "An Error occured: #{ex.class} (server: #{@current_server})\n#{ex.message}"
|
287
|
+
else
|
288
|
+
raise response[:error] if response.has_key?(:error)
|
289
|
+
return response
|
280
290
|
end
|
281
|
-
raise response[:error] if response.has_key?(:error)
|
282
|
-
return response
|
283
291
|
end
|
284
292
|
end
|
285
293
|
end
|
@@ -0,0 +1,143 @@
|
|
1
|
+
# ======================================================================
|
2
|
+
#
|
3
|
+
# LeoFS Manager Client
|
4
|
+
#
|
5
|
+
# Copyright (c) 2012 Rakuten, Inc.
|
6
|
+
#
|
7
|
+
# This file is provided to you under the Apache License,
|
8
|
+
# Version 2.0 (the "License"); you may not use this file
|
9
|
+
# except in compliance with the License. You may obtain
|
10
|
+
# a copy of the License at
|
11
|
+
#
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
+
#
|
14
|
+
# Unless required by applicable law or agreed to in writing,
|
15
|
+
# software distributed under the License is distributed on an
|
16
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
17
|
+
# KIND, either express or implied. See the License for the
|
18
|
+
# specific language governing permissions and limitations
|
19
|
+
# under the License.
|
20
|
+
#
|
21
|
+
# ======================================================================
|
22
|
+
|
23
|
+
require "socket"
|
24
|
+
|
25
|
+
module Dummy
|
26
|
+
module Response
|
27
|
+
Status = {
|
28
|
+
:system_info => {
|
29
|
+
:version => "0.10.1",
|
30
|
+
:n => "1",
|
31
|
+
:r => "1",
|
32
|
+
:w => "1",
|
33
|
+
:d => "1",
|
34
|
+
:ring_size => "128",
|
35
|
+
:ring_hash_cur => "2688134336",
|
36
|
+
:ring_hash_prev => "2688134336"},
|
37
|
+
:node_list => [
|
38
|
+
{
|
39
|
+
:type => "S",
|
40
|
+
:node => "storage_0@127.0.0.1",
|
41
|
+
:state => "running",
|
42
|
+
:ring_cur => "a039acc0",
|
43
|
+
:ring_prev => "a039acc0",
|
44
|
+
:when => "2012-09-21 15:08:22 +0900"
|
45
|
+
}, {
|
46
|
+
:type => "G",
|
47
|
+
:node => "gateway_0@127.0.0.1",
|
48
|
+
:state => "running",
|
49
|
+
:ring_cur => "a039acc0",
|
50
|
+
:ring_prev => "a039acc0",
|
51
|
+
:when => "2012-09-21 15:08:25 +0900"
|
52
|
+
}
|
53
|
+
]
|
54
|
+
}.to_json
|
55
|
+
|
56
|
+
Whereis = {
|
57
|
+
:assigned_info => [
|
58
|
+
{
|
59
|
+
:node => "storage_0@127.0.0.1",
|
60
|
+
:vnode_id => "",
|
61
|
+
:size => "",
|
62
|
+
:clock => "",
|
63
|
+
:checksum => "",
|
64
|
+
:timestamp => "",
|
65
|
+
:delete => 0,
|
66
|
+
:num_of_chunks => 0
|
67
|
+
}
|
68
|
+
]
|
69
|
+
}.to_json
|
70
|
+
|
71
|
+
S3GetEndpoints = {
|
72
|
+
:endpoints => [
|
73
|
+
{:endpoint => "s3.amazonaws.com", :created_at=>"2012-09-21 15:08:11 +0900"},
|
74
|
+
{:endpoint => "localhost", :created_at=>"2012-09-21 15:08:11 +0900"},
|
75
|
+
{:endpoint => "foo", :created_at=>"2012-09-21 18:51:08 +0900"},
|
76
|
+
{:endpoint => "leofs.org", :created_at=>"2012-09-21 15:08:11 +0900"}
|
77
|
+
]
|
78
|
+
}.to_json
|
79
|
+
|
80
|
+
S3GetBuckets = {
|
81
|
+
:buckets => [
|
82
|
+
{
|
83
|
+
:bucket => "test",
|
84
|
+
:owner => "test",
|
85
|
+
:created_at => "2012-09-24 15:38:49 +0900"
|
86
|
+
}
|
87
|
+
]
|
88
|
+
}.to_json
|
89
|
+
|
90
|
+
S3GetKeys = {
|
91
|
+
:users => [
|
92
|
+
{ :access_key_id => "05236", :user_id => "_test_leofs_", :created_at => "2012-11-20 15:13:20 +0900" }
|
93
|
+
]
|
94
|
+
}.to_json
|
95
|
+
end
|
96
|
+
|
97
|
+
Argument = "arg" # passed to command which requires some arguments.
|
98
|
+
|
99
|
+
# dummy Manager
|
100
|
+
class Manager
|
101
|
+
def initialize
|
102
|
+
t = Thread.new do
|
103
|
+
TCPServer.open(Host, Port) do |server|
|
104
|
+
loop do
|
105
|
+
begin
|
106
|
+
socket = server.accept
|
107
|
+
while line = socket.readline.split.first
|
108
|
+
response = process_line(line)
|
109
|
+
socket.puts(response)
|
110
|
+
end
|
111
|
+
rescue EOFError
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
nil until t.stop? # wait server start
|
117
|
+
end
|
118
|
+
|
119
|
+
def process_line(line)
|
120
|
+
line.rstrip!
|
121
|
+
begin
|
122
|
+
case line
|
123
|
+
when "status"
|
124
|
+
Response::Status
|
125
|
+
when "s3-get-buckets"
|
126
|
+
Response::S3GetBuckets
|
127
|
+
when "whereis"
|
128
|
+
Response::Whereis
|
129
|
+
when "s3-get-endpoints"
|
130
|
+
Response::S3GetEndpoints
|
131
|
+
when "s3-get-buckets"
|
132
|
+
Response::S3GetBuckets
|
133
|
+
when "s3-get-keys"
|
134
|
+
Response::S3GetKeys
|
135
|
+
else
|
136
|
+
{ :result => line }.to_json
|
137
|
+
end
|
138
|
+
rescue => ex
|
139
|
+
{ :error => ex.message }.to_json
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
@@ -20,121 +20,14 @@
|
|
20
20
|
#
|
21
21
|
# ======================================================================
|
22
22
|
|
23
|
-
require "socket"
|
24
23
|
require "json"
|
24
|
+
require_relative "dummy_tcp_server"
|
25
25
|
require_relative "../lib/leofs_manager_client"
|
26
26
|
|
27
27
|
Host = "localhost"
|
28
28
|
Port = 50000
|
29
29
|
|
30
30
|
$DEBUG = false
|
31
|
-
Thread.abort_on_exception = true
|
32
|
-
|
33
|
-
module Dummy
|
34
|
-
module Response
|
35
|
-
Status = {
|
36
|
-
:system_info => {
|
37
|
-
:version => "0.10.1",
|
38
|
-
:n => "1",
|
39
|
-
:r => "1",
|
40
|
-
:w => "1",
|
41
|
-
:d => "1",
|
42
|
-
:ring_size => "128",
|
43
|
-
:ring_hash_cur => "2688134336",
|
44
|
-
:ring_hash_prev => "2688134336"},
|
45
|
-
:node_list => [
|
46
|
-
{
|
47
|
-
:type => "S",
|
48
|
-
:node => "storage_0@127.0.0.1",
|
49
|
-
:state => "running",
|
50
|
-
:ring_cur => "a039acc0",
|
51
|
-
:ring_prev => "a039acc0",
|
52
|
-
:when => "2012-09-21 15:08:22 +0900"
|
53
|
-
}, {
|
54
|
-
:type => "G",
|
55
|
-
:node => "gateway_0@127.0.0.1",
|
56
|
-
:state => "running",
|
57
|
-
:ring_cur => "a039acc0",
|
58
|
-
:ring_prev => "a039acc0",
|
59
|
-
:when => "2012-09-21 15:08:25 +0900"
|
60
|
-
}
|
61
|
-
]
|
62
|
-
}.to_json
|
63
|
-
|
64
|
-
Whereis = {
|
65
|
-
:assigned_info => [
|
66
|
-
{
|
67
|
-
:node => "storage_0@127.0.0.1",
|
68
|
-
:vnode_id => "",
|
69
|
-
:size => "",
|
70
|
-
:clock => "",
|
71
|
-
:checksum => "",
|
72
|
-
:timestamp => "",
|
73
|
-
:delete => 0,
|
74
|
-
:num_of_chunks => 0
|
75
|
-
}
|
76
|
-
]
|
77
|
-
}.to_json
|
78
|
-
|
79
|
-
S3GetEndpoints = {
|
80
|
-
:endpoints => [
|
81
|
-
{:endpoint => "s3.amazonaws.com", :created_at=>"2012-09-21 15:08:11 +0900"},
|
82
|
-
{:endpoint => "localhost", :created_at=>"2012-09-21 15:08:11 +0900"},
|
83
|
-
{:endpoint => "foo", :created_at=>"2012-09-21 18:51:08 +0900"},
|
84
|
-
{:endpoint => "leofs.org", :created_at=>"2012-09-21 15:08:11 +0900"}
|
85
|
-
]
|
86
|
-
}.to_json
|
87
|
-
|
88
|
-
S3GetBuckets = {
|
89
|
-
:buckets => [
|
90
|
-
{
|
91
|
-
:bucket => "test",
|
92
|
-
:owner => "test",
|
93
|
-
:created_at => "2012-09-24 15:38:49 +0900"
|
94
|
-
}
|
95
|
-
]
|
96
|
-
}.to_json
|
97
|
-
end
|
98
|
-
|
99
|
-
Argument = "hoge" # passed to command which requires some arguments.
|
100
|
-
|
101
|
-
# dummy Manager
|
102
|
-
class Manager
|
103
|
-
Thread.new do
|
104
|
-
TCPServer.open(Host, Port) do |server|
|
105
|
-
loop do
|
106
|
-
begin
|
107
|
-
socket = server.accept
|
108
|
-
while line = socket.readline.split.first
|
109
|
-
line.rstrip!
|
110
|
-
begin
|
111
|
-
case line
|
112
|
-
when "status"
|
113
|
-
result = Response::Status
|
114
|
-
when "s3-get-buckets"
|
115
|
-
result = Response::S3GetBuckets
|
116
|
-
when "whereis"
|
117
|
-
result = Response::Whereis
|
118
|
-
when "s3-get-endpoints"
|
119
|
-
result = Response::S3GetEndpoints
|
120
|
-
when "s3-get-buckets"
|
121
|
-
result = Response::S3GetBuckets
|
122
|
-
else
|
123
|
-
result = { :result => line }.to_json
|
124
|
-
end
|
125
|
-
rescue => ex
|
126
|
-
result = { :error => ex.message }.to_json
|
127
|
-
ensure
|
128
|
-
socket.puts(result)
|
129
|
-
end
|
130
|
-
end
|
131
|
-
rescue EOFError
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
31
|
|
139
32
|
# key: api_name, value: num of args
|
140
33
|
NoResultAPIs = {
|
@@ -156,24 +49,19 @@ describe LeoFSManager do
|
|
156
49
|
Dummy::Manager.new
|
157
50
|
@manager = Client.new("#{Host}:#{Port}")
|
158
51
|
end
|
52
|
+
subject { @manager }
|
159
53
|
|
160
54
|
it "raises error when it is passed invalid params" do
|
161
55
|
lambda { Client.new }.should raise_error
|
162
56
|
end
|
163
57
|
|
164
58
|
describe "#status" do
|
165
|
-
|
166
|
-
|
167
|
-
end
|
59
|
+
its(:status) { should be_a Status }
|
60
|
+
its("status.system_info") { should be_a Status::System }
|
168
61
|
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
it "returns Array of Node" do
|
174
|
-
node_list = @manager.status.node_list
|
175
|
-
node_list.should be_a Array
|
176
|
-
node_list.each do |node|
|
62
|
+
its("status.node_list") do
|
63
|
+
should be_a Array
|
64
|
+
subject.each do |node|
|
177
65
|
node.should be_a Status::Node
|
178
66
|
end
|
179
67
|
end
|
@@ -181,7 +69,7 @@ describe LeoFSManager do
|
|
181
69
|
|
182
70
|
describe "#whereis" do
|
183
71
|
it "returns Array of WhereInfo" do
|
184
|
-
result =
|
72
|
+
result = subject.whereis("path")
|
185
73
|
result.should be_a Array
|
186
74
|
result.each do |where_info|
|
187
75
|
where_info.should be_a AssignedFile
|
@@ -192,52 +80,53 @@ describe LeoFSManager do
|
|
192
80
|
|
193
81
|
describe "#du" do
|
194
82
|
it "returns DiskUsage" do
|
195
|
-
|
83
|
+
subject.du("node").should be_a StorageStat
|
196
84
|
end
|
197
85
|
end
|
198
86
|
|
199
|
-
describe "#
|
87
|
+
describe "#s3_create_key" do
|
200
88
|
it "returns Credential" do
|
201
|
-
|
89
|
+
subject.s3_create_key("user_id").should be_a Credential
|
202
90
|
end
|
203
91
|
end
|
204
92
|
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
result.each do |endpoint|
|
210
|
-
endpoint.should be_a Endpoint
|
211
|
-
end
|
93
|
+
its(:s3_get_keys) do
|
94
|
+
should be_a Array
|
95
|
+
subject.each do |account|
|
96
|
+
account.should be_a User
|
212
97
|
end
|
213
98
|
end
|
214
99
|
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
100
|
+
its(:s3_get_endpoints) do
|
101
|
+
should be_a Array
|
102
|
+
subject.each do |endpoint|
|
103
|
+
endpoint.should be_a Endpoint
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
its(:s3_get_buckets) do
|
108
|
+
should be_a Array
|
109
|
+
subject.each do |buckets|
|
110
|
+
buckets.should be_a Bucket
|
222
111
|
end
|
223
112
|
end
|
224
113
|
|
225
114
|
NoResultAPIs.each do |api, num_of_args|
|
226
115
|
describe "##{api}" do
|
227
116
|
it "returns nil" do
|
228
|
-
|
117
|
+
subject.send(api, *(["argument"] * num_of_args)).should be_nil
|
229
118
|
end
|
230
119
|
end
|
231
120
|
end
|
232
121
|
|
233
122
|
describe "#disconnect!" do
|
234
123
|
it "returns nil" do
|
235
|
-
|
124
|
+
subject.disconnect!.should be_nil
|
236
125
|
end
|
237
126
|
|
238
127
|
it "accepts no more requests" do
|
239
128
|
lambda {
|
240
|
-
|
129
|
+
subject.status
|
241
130
|
}.should raise_error
|
242
131
|
end
|
243
132
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: leofs_manager_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-11-20 00:00:00.000000000 Z
|
14
14
|
dependencies: []
|
15
15
|
description: Client for LeoFS Manager
|
16
16
|
email:
|
@@ -27,6 +27,7 @@ files:
|
|
27
27
|
- leofs_manager_client.gemspec
|
28
28
|
- lib/leofs_manager_client.rb
|
29
29
|
- lib/leofs_manager_client/leofs_manager_models.rb
|
30
|
+
- spec/dummy_tcp_server.rb
|
30
31
|
- spec/leofs_manager_client_spec.rb
|
31
32
|
homepage: ''
|
32
33
|
licenses: []
|
@@ -53,4 +54,5 @@ signing_key:
|
|
53
54
|
specification_version: 3
|
54
55
|
summary: Client for LeoFS Manager
|
55
56
|
test_files:
|
57
|
+
- spec/dummy_tcp_server.rb
|
56
58
|
- spec/leofs_manager_client_spec.rb
|