ceph_storage 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.cluster.yml.example +19 -0
- data/.gitignore +1 -0
- data/.rspec +2 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +110 -0
- data/Guardfile +20 -0
- data/README.md +108 -0
- data/Rakefile +7 -0
- data/ceph_storage.gemspec +36 -0
- data/lib/ceph_storage.rb +28 -0
- data/lib/ceph_storage/cluster.rb +93 -0
- data/lib/ceph_storage/cluster_factory.rb +24 -0
- data/lib/ceph_storage/cluster_wrapper.rb +16 -0
- data/lib/ceph_storage/pool.rb +126 -0
- data/lib/ceph_storage/pool_enumerator.rb +24 -0
- data/lib/ceph_storage/pool_factory.rb +15 -0
- data/lib/ceph_storage/pool_wrapper.rb +17 -0
- data/lib/ceph_storage/storage_object.rb +48 -0
- data/lib/ceph_storage/storage_object/file_storage_object.rb +28 -0
- data/lib/ceph_storage/storage_object/rados_storage_object.rb +41 -0
- data/lib/ceph_storage/storage_object/rados_storage_object_enumerator.rb +29 -0
- data/lib/ceph_storage/storage_object/rados_wrapper.rb +21 -0
- data/lib/ceph_storage/storage_object/url_storage_object.rb +34 -0
- data/lib/ceph_storage/storage_object/xattr.rb +18 -0
- data/lib/ceph_storage/storage_object/xattr_enumerator.rb +29 -0
- data/lib/ceph_storage/version.rb +3 -0
- data/spec/ceph_storage_cluster_factory_spec.rb +14 -0
- data/spec/ceph_storage_cluster_spec.rb +76 -0
- data/spec/ceph_storage_file_storage_object_spec.rb +31 -0
- data/spec/ceph_storage_pool_enumerator.rb +34 -0
- data/spec/ceph_storage_pool_factory_spec.rb +14 -0
- data/spec/ceph_storage_pool_spec.rb +167 -0
- data/spec/ceph_storage_rados_storage_object_enumerator_spec.rb +72 -0
- data/spec/ceph_storage_rados_storage_object_spec.rb +112 -0
- data/spec/ceph_storage_storage_object_spec.rb +98 -0
- data/spec/ceph_storage_xattr_enumerator_spec.rb +75 -0
- data/spec/ceph_storage_xattr_spec.rb +69 -0
- data/spec/spec_helper.rb +30 -0
- data/tasks/rspec.rake +4 -0
- data/tasks/rubocop.rake +13 -0
- metadata +281 -0
@@ -0,0 +1,112 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'logger'
|
3
|
+
describe CephStorage::StorageObject::RadosStorageObject do
|
4
|
+
let(:config) { cluster_config }
|
5
|
+
let(:spconfig) { spec_config }
|
6
|
+
let(:cluster) { CephStorage::ClusterFactory.build config }
|
7
|
+
let(:rule_id) { spconfig[:pool][:rule_id] }
|
8
|
+
let(:pool_name) { spconfig[:pool][:name] }
|
9
|
+
let(:pool) { cluster.pool(pool_name) }
|
10
|
+
|
11
|
+
describe 'pool creation' do
|
12
|
+
subject { pool }
|
13
|
+
it 'should be able to create pool' do
|
14
|
+
expect { subject.create(rule_id: rule_id) }.to_not raise_exception
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should be writable' do
|
18
|
+
expect { pool.stat }.not_to raise_exception
|
19
|
+
expect(pool.stat).to be_a Hash
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
let(:object_name) { spconfig[:pool][:object_name] }
|
24
|
+
let(:storage_object) { pool.storage_object(object_name) }
|
25
|
+
subject { storage_object }
|
26
|
+
|
27
|
+
it 'should be a RadosStorageObject' do
|
28
|
+
expect(subject).to be_a ::CephStorage::StorageObject::RadosStorageObject
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should be a CephRuby::RadosObject' do
|
32
|
+
expect(subject).to be_a ::CephRuby::RadosObject
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should be a StorageObject' do
|
36
|
+
expect(subject).to be_a ::CephStorage::StorageObject
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should respond to write_file' do
|
40
|
+
expect(subject).to respond_to :write_file
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should respond to read_file' do
|
44
|
+
expect(subject).to respond_to :read_file
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should respond to path' do
|
48
|
+
expect(subject).to respond_to :path
|
49
|
+
end
|
50
|
+
|
51
|
+
describe 'write_file' do
|
52
|
+
it 'should not raise exception' do
|
53
|
+
expect do
|
54
|
+
subject.write_file('content string to be written')
|
55
|
+
end.not_to raise_exception
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe 'read_file' do
|
60
|
+
it 'should call ::CephRuby::RadosObject.read_full' do
|
61
|
+
expect(subject).to receive(:read_full)
|
62
|
+
subject.read_file
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should return the file contents' do
|
66
|
+
expect(subject.read_file).to eq('content string to be written')
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe 'path' do
|
71
|
+
let(:cluster_name) { config[:cluster] }
|
72
|
+
it 'should have a specific format' do
|
73
|
+
expect(subject.path).to eq(
|
74
|
+
"ceph://#{cluster_name}/#{pool_name}/#{object_name}"
|
75
|
+
)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe 'parent methods should run with wrapper' do
|
80
|
+
let(:new_content) { 'asdkljasdkjlasdjkladasjkdakjdassjkladsjkladsjkladsjk' }
|
81
|
+
describe 'exists?' do
|
82
|
+
it 'should return true' do
|
83
|
+
expect(subject.exists?).to eq(true)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# Skip stat as it is covered by size/exists?
|
88
|
+
|
89
|
+
describe 'read/write' do
|
90
|
+
it 'should write different content to the file' do
|
91
|
+
expect { subject.write(0, new_content) }.not_to raise_exception
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'should be readable' do
|
95
|
+
expect(subject.read(0, new_content.length)).to eq(new_content)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe 'size' do
|
100
|
+
it 'should equal size of new_content' do
|
101
|
+
expect(subject.size).to eq(new_content.length)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe 'pool deletion' do
|
107
|
+
subject { pool }
|
108
|
+
it 'should be able to delete pool' do
|
109
|
+
expect { subject.destroy }.not_to raise_exception
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
# Dummy storage_Object to represent a file
|
3
|
+
|
4
|
+
class DummyXattr
|
5
|
+
attr_accessor :name
|
6
|
+
attr_accessor :value
|
7
|
+
def initialize(name)
|
8
|
+
self.name = name
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class DummyXattrEnumerator
|
13
|
+
include ::Enumerable
|
14
|
+
|
15
|
+
attr_accessor :xattrs
|
16
|
+
def initialize
|
17
|
+
self.xattrs = []
|
18
|
+
10.times do |i|
|
19
|
+
xattr = DummyXattr.new("key#{i}")
|
20
|
+
xattr.value = i
|
21
|
+
xattrs << xattr
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def each
|
26
|
+
return enum_for(:each) unless block_given?
|
27
|
+
|
28
|
+
xattrs.each do |x|
|
29
|
+
yield x
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class DummyStorage
|
35
|
+
extend CephStorage::StorageObject
|
36
|
+
include CephStorage::StorageObject
|
37
|
+
|
38
|
+
attr_accessor :contents
|
39
|
+
|
40
|
+
def write_file(contents)
|
41
|
+
self.contents = contents
|
42
|
+
end
|
43
|
+
|
44
|
+
def read_file
|
45
|
+
contents
|
46
|
+
end
|
47
|
+
|
48
|
+
def xattr(name)
|
49
|
+
DummyXattr.new(name)
|
50
|
+
end
|
51
|
+
|
52
|
+
def xattr_enumerator
|
53
|
+
puts 'call xattr_enumerator'
|
54
|
+
DummyXattrEnumerator.new
|
55
|
+
end
|
56
|
+
|
57
|
+
def destroy
|
58
|
+
self.contents = nil
|
59
|
+
end
|
60
|
+
end
|
61
|
+
describe CephStorage::StorageObject do
|
62
|
+
before do
|
63
|
+
@storage_object1 = DummyStorage.new
|
64
|
+
@storage_object2 = DummyStorage.new
|
65
|
+
end
|
66
|
+
subject { @storage_object1 }
|
67
|
+
|
68
|
+
it 'should respond to move' do
|
69
|
+
expect(subject).to respond_to :move
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should respond to copy' do
|
73
|
+
expect(subject).to respond_to :copy
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'should respond to copy_xattrs' do
|
77
|
+
expect(subject).to respond_to :copy_xattrs
|
78
|
+
end
|
79
|
+
|
80
|
+
describe 'copying file' do
|
81
|
+
it 'should read from storage_object1 and write to storage_object2' do
|
82
|
+
expect(@storage_object1).to receive(:read_file)
|
83
|
+
expect(@storage_object2).to receive(:write_file)
|
84
|
+
expect(@storage_object1).to receive(:copy_xattrs)
|
85
|
+
@storage_object1.copy(@storage_object2)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe 'moving file' do
|
90
|
+
it 'should read from object1, write object2, delete object1' do
|
91
|
+
expect(@storage_object1).to receive(:read_file)
|
92
|
+
expect(@storage_object2).to receive(:write_file)
|
93
|
+
expect(@storage_object1).to receive(:copy_xattrs)
|
94
|
+
expect(@storage_object1).to receive(:destroy)
|
95
|
+
@storage_object1.move(@storage_object2)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'logger'
|
3
|
+
describe CephStorage::StorageObject::XattrEnumerator do
|
4
|
+
let(:config) { cluster_config }
|
5
|
+
let(:spconfig) { spec_config }
|
6
|
+
let(:cluster) { CephStorage::ClusterFactory.build config }
|
7
|
+
let(:rule_id) { spconfig[:pool][:rule_id] }
|
8
|
+
let(:pool_name) { spconfig[:pool][:name] }
|
9
|
+
let(:pool) { cluster.pool(pool_name) }
|
10
|
+
|
11
|
+
describe 'pool creation' do
|
12
|
+
subject { pool }
|
13
|
+
it 'should be able to create pool' do
|
14
|
+
expect { subject.create(rule_id: rule_id) }.to_not raise_exception
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should be writable' do
|
18
|
+
expect { pool.stat }.not_to raise_exception
|
19
|
+
expect(pool.stat).to be_a Hash
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
let(:object_name) { spconfig[:pool][:object_name] }
|
24
|
+
let(:storage_object) { pool.storage_object(object_name) }
|
25
|
+
|
26
|
+
describe 'Storage Object' do
|
27
|
+
subject { storage_object }
|
28
|
+
|
29
|
+
it 'should be writeable' do
|
30
|
+
expect { subject.overwrite('some content') }.not_to raise_exception
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe 'XattrEnumerator' do
|
35
|
+
let(:xattr_name) { spconfig[:pool][:xattr_name] }
|
36
|
+
let(:xattr_value) { spconfig[:pool][:xattr_value] }
|
37
|
+
let(:xattr_enumerator) { storage_object.xattr_enumerator }
|
38
|
+
subject { xattr_enumerator }
|
39
|
+
|
40
|
+
it 'should be a CephRuby::XattrEnumerator' do
|
41
|
+
expect(subject).to be_a ::CephStorage::StorageObject::XattrEnumerator
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should be a CephRuby::XattrEnumerator' do
|
45
|
+
expect(subject).to be_a ::CephRuby::XattrEnumerator
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should have 0 xattrs' do
|
49
|
+
expect(subject.inject(0) { |a, _e| a + 1 }).to be 0
|
50
|
+
end
|
51
|
+
|
52
|
+
describe 'after populating' do
|
53
|
+
before do
|
54
|
+
10.times do |i|
|
55
|
+
storage_object.xattr("#{xattr_name}.#{i}").value = xattr_value
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should have 10 xattrs' do
|
60
|
+
expect(subject.inject(0) { |a, _e| a + 1 }).to be 10
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'should return CephStorage::Xattrs' do
|
64
|
+
expect(subject.first).to be_a CephStorage::StorageObject::Xattr
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe 'pool deletion' do
|
70
|
+
subject { pool }
|
71
|
+
it 'should be able to delete pool' do
|
72
|
+
expect { subject.destroy }.not_to raise_exception
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'logger'
|
3
|
+
describe CephStorage::StorageObject::Xattr do
|
4
|
+
let(:config) { cluster_config }
|
5
|
+
let(:spconfig) { spec_config }
|
6
|
+
let(:cluster) { CephStorage::ClusterFactory.build config }
|
7
|
+
let(:rule_id) { spconfig[:pool][:rule_id] }
|
8
|
+
let(:pool_name) { spconfig[:pool][:name] }
|
9
|
+
let(:pool) { cluster.pool(pool_name) }
|
10
|
+
|
11
|
+
describe 'pool creation' do
|
12
|
+
subject { pool }
|
13
|
+
it 'should be able to create pool' do
|
14
|
+
expect { subject.create(rule_id: rule_id) }.to_not raise_exception
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should be writable' do
|
18
|
+
expect { pool.stat }.not_to raise_exception
|
19
|
+
expect(pool.stat).to be_a Hash
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
let(:object_name) { spconfig[:pool][:object_name] }
|
24
|
+
let(:storage_object) { pool.storage_object(object_name) }
|
25
|
+
|
26
|
+
describe 'Storage Object' do
|
27
|
+
subject { storage_object }
|
28
|
+
|
29
|
+
it 'should be writeable' do
|
30
|
+
expect { subject.overwrite('some content') }.not_to raise_exception
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe 'xattr' do
|
35
|
+
let(:xattr_name) { spconfig[:pool][:xattr_name] }
|
36
|
+
let(:xattr_value) { spconfig[:pool][:xattr_value] }
|
37
|
+
let(:xattr) { storage_object.xattr(xattr_name) }
|
38
|
+
subject { xattr }
|
39
|
+
|
40
|
+
it 'should be a StorageObject::Xattr' do
|
41
|
+
expect(subject).to be_a ::CephStorage::StorageObject::Xattr
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should be a CephRuby::Xattr' do
|
45
|
+
expect(subject).to be_a ::CephRuby::Xattr
|
46
|
+
end
|
47
|
+
|
48
|
+
describe 'before creation' do
|
49
|
+
it 'should not throw an exception on read' do
|
50
|
+
expect { subject.value }.to raise_exception Errno::ENODATA
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'should be writable' do
|
54
|
+
expect { subject.value = xattr_value }.not_to raise_exception
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should match the new value' do
|
58
|
+
expect(subject.value).to eq(xattr_value)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe 'pool deletion' do
|
64
|
+
subject { pool }
|
65
|
+
it 'should be able to delete pool' do
|
66
|
+
expect { subject.destroy }.not_to raise_exception
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'ceph_storage'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
def spec_config
|
5
|
+
YAML.load(File.read('.cluster.yml')) if File.exist? '.cluster.yml'
|
6
|
+
end
|
7
|
+
|
8
|
+
def cluster_config
|
9
|
+
sp_config = spec_config
|
10
|
+
hash = {}
|
11
|
+
hash[:config_dir] = sp_config[:config_dir]
|
12
|
+
hash[:user] = sp_config[:user]
|
13
|
+
hash[:cluster] = sp_config[:cluster]
|
14
|
+
hash[:flags] = sp_config[:flags]
|
15
|
+
hash
|
16
|
+
end
|
17
|
+
|
18
|
+
RSpec.configure do |c|
|
19
|
+
config = spec_config
|
20
|
+
c.fail_fast = true
|
21
|
+
c.filter_run_excluding(
|
22
|
+
requires_cluster_readable: true
|
23
|
+
) unless config[:readable]
|
24
|
+
c.filter_run_excluding(
|
25
|
+
requires_create_delete: true
|
26
|
+
) unless config[:pool][:create_delete]
|
27
|
+
c.filter_run_excluting(
|
28
|
+
requires_create_delete: true
|
29
|
+
) unless config[:pool][:create_delete]
|
30
|
+
end
|
data/tasks/rspec.rake
ADDED
data/tasks/rubocop.rake
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rubocop/rake_task'
|
2
|
+
|
3
|
+
desc 'Rub RoboCop on the lib and spec directory'
|
4
|
+
RuboCop::RakeTask.new(:rubocop_dev) do |task|
|
5
|
+
task.patterns = ['lib/**/*.rb', 'spec/**/*.rb']
|
6
|
+
task.fail_on_error = false
|
7
|
+
end
|
8
|
+
|
9
|
+
RuboCop::RakeTask.new(:rubocop_test) do |task|
|
10
|
+
task.patterns = ['lib/**/*.rb', 'spec/**/*.rb']
|
11
|
+
task.formatters = ['files']
|
12
|
+
task.fail_on_error = true
|
13
|
+
end
|
metadata
ADDED
@@ -0,0 +1,281 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ceph_storage
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Livelink Technology LTD
|
8
|
+
- Stuart Harland
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2016-05-23 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: ffi
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '1.9'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '1.9'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: ceph-ruby-livelink
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '1.5'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '1.5'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: activesupport
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '3.0'
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '3.0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: facets
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '3.0'
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '3.0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: guard
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '2.13'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '2.13'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: listen
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - '='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 3.0.6
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - '='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: 3.0.6
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: guard-rake
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - "~>"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '1.0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - "~>"
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '1.0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: guard-rspec
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '4.6'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '4.6'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: guard-bundler
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '2.1'
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - "~>"
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '2.1'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: rubocop
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - "~>"
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0.39'
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - "~>"
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0.39'
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: rspec
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - "~>"
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '3.4'
|
161
|
+
type: :development
|
162
|
+
prerelease: false
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - "~>"
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '3.4'
|
168
|
+
- !ruby/object:Gem::Dependency
|
169
|
+
name: rake
|
170
|
+
requirement: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - "~>"
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '11.1'
|
175
|
+
type: :development
|
176
|
+
prerelease: false
|
177
|
+
version_requirements: !ruby/object:Gem::Requirement
|
178
|
+
requirements:
|
179
|
+
- - "~>"
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '11.1'
|
182
|
+
- !ruby/object:Gem::Dependency
|
183
|
+
name: bundler
|
184
|
+
requirement: !ruby/object:Gem::Requirement
|
185
|
+
requirements:
|
186
|
+
- - "~>"
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: '1.3'
|
189
|
+
type: :development
|
190
|
+
prerelease: false
|
191
|
+
version_requirements: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - "~>"
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '1.3'
|
196
|
+
description: Easy access of Objects in ceph
|
197
|
+
email:
|
198
|
+
- infraops@livelinktechnology.net
|
199
|
+
executables: []
|
200
|
+
extensions: []
|
201
|
+
extra_rdoc_files: []
|
202
|
+
files:
|
203
|
+
- ".cluster.yml.example"
|
204
|
+
- ".gitignore"
|
205
|
+
- ".rspec"
|
206
|
+
- Gemfile
|
207
|
+
- Gemfile.lock
|
208
|
+
- Guardfile
|
209
|
+
- README.md
|
210
|
+
- Rakefile
|
211
|
+
- ceph_storage.gemspec
|
212
|
+
- lib/ceph_storage.rb
|
213
|
+
- lib/ceph_storage/cluster.rb
|
214
|
+
- lib/ceph_storage/cluster_factory.rb
|
215
|
+
- lib/ceph_storage/cluster_wrapper.rb
|
216
|
+
- lib/ceph_storage/pool.rb
|
217
|
+
- lib/ceph_storage/pool_enumerator.rb
|
218
|
+
- lib/ceph_storage/pool_factory.rb
|
219
|
+
- lib/ceph_storage/pool_wrapper.rb
|
220
|
+
- lib/ceph_storage/storage_object.rb
|
221
|
+
- lib/ceph_storage/storage_object/file_storage_object.rb
|
222
|
+
- lib/ceph_storage/storage_object/rados_storage_object.rb
|
223
|
+
- lib/ceph_storage/storage_object/rados_storage_object_enumerator.rb
|
224
|
+
- lib/ceph_storage/storage_object/rados_wrapper.rb
|
225
|
+
- lib/ceph_storage/storage_object/url_storage_object.rb
|
226
|
+
- lib/ceph_storage/storage_object/xattr.rb
|
227
|
+
- lib/ceph_storage/storage_object/xattr_enumerator.rb
|
228
|
+
- lib/ceph_storage/version.rb
|
229
|
+
- spec/ceph_storage_cluster_factory_spec.rb
|
230
|
+
- spec/ceph_storage_cluster_spec.rb
|
231
|
+
- spec/ceph_storage_file_storage_object_spec.rb
|
232
|
+
- spec/ceph_storage_pool_enumerator.rb
|
233
|
+
- spec/ceph_storage_pool_factory_spec.rb
|
234
|
+
- spec/ceph_storage_pool_spec.rb
|
235
|
+
- spec/ceph_storage_rados_storage_object_enumerator_spec.rb
|
236
|
+
- spec/ceph_storage_rados_storage_object_spec.rb
|
237
|
+
- spec/ceph_storage_storage_object_spec.rb
|
238
|
+
- spec/ceph_storage_xattr_enumerator_spec.rb
|
239
|
+
- spec/ceph_storage_xattr_spec.rb
|
240
|
+
- spec/spec_helper.rb
|
241
|
+
- tasks/rspec.rake
|
242
|
+
- tasks/rubocop.rake
|
243
|
+
homepage: https://github.com/livelink/ceph_storage
|
244
|
+
licenses:
|
245
|
+
- MIT
|
246
|
+
metadata: {}
|
247
|
+
post_install_message:
|
248
|
+
rdoc_options: []
|
249
|
+
require_paths:
|
250
|
+
- lib
|
251
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
252
|
+
requirements:
|
253
|
+
- - ">="
|
254
|
+
- !ruby/object:Gem::Version
|
255
|
+
version: '0'
|
256
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
257
|
+
requirements:
|
258
|
+
- - ">="
|
259
|
+
- !ruby/object:Gem::Version
|
260
|
+
version: '0'
|
261
|
+
requirements: []
|
262
|
+
rubyforge_project:
|
263
|
+
rubygems_version: 2.6.2
|
264
|
+
signing_key:
|
265
|
+
specification_version: 4
|
266
|
+
summary: Ceph-ruby provides an API, however this gem provides consistent connection
|
267
|
+
to ceph pools and clusters using multiton objects
|
268
|
+
test_files:
|
269
|
+
- spec/ceph_storage_cluster_factory_spec.rb
|
270
|
+
- spec/ceph_storage_cluster_spec.rb
|
271
|
+
- spec/ceph_storage_file_storage_object_spec.rb
|
272
|
+
- spec/ceph_storage_pool_enumerator.rb
|
273
|
+
- spec/ceph_storage_pool_factory_spec.rb
|
274
|
+
- spec/ceph_storage_pool_spec.rb
|
275
|
+
- spec/ceph_storage_rados_storage_object_enumerator_spec.rb
|
276
|
+
- spec/ceph_storage_rados_storage_object_spec.rb
|
277
|
+
- spec/ceph_storage_storage_object_spec.rb
|
278
|
+
- spec/ceph_storage_xattr_enumerator_spec.rb
|
279
|
+
- spec/ceph_storage_xattr_spec.rb
|
280
|
+
- spec/spec_helper.rb
|
281
|
+
has_rdoc:
|