uricp 0.0.15 → 0.0.20
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 +4 -4
- data/.rubocop.yml +3 -0
- data/Gemfile.lock +16 -21
- data/Jenkinsfile +90 -33
- data/Rakefile +24 -36
- data/almalinux8/Dockerfile +26 -0
- data/bin/uricp +25 -11
- data/bionic/Dockerfile +4 -3
- data/centos7/Dockerfile +17 -12
- data/cucumber.yml +1 -0
- data/features/check_uri_path.feature +14 -0
- data/features/rbd_access.feature +226 -0
- data/features/step_definitions/orbit_steps.rb +11 -4
- data/features/step_definitions/rbd_steps.rb +8 -0
- data/features/step_definitions/uricp_steps.rb +8 -4
- data/focal/Dockerfile +28 -0
- data/lib/segment_upload.rb +20 -22
- data/lib/uricp/curl_primitives.rb +31 -33
- data/lib/uricp/orbit_auth.rb +23 -27
- data/lib/uricp/segmenter.rb +12 -16
- data/lib/uricp/strategy/cache_common.rb +30 -12
- data/lib/uricp/strategy/cached_get.rb +19 -22
- data/lib/uricp/strategy/cleaner.rb +2 -8
- data/lib/uricp/strategy/common.rb +76 -18
- data/lib/uricp/strategy/local_convert.rb +10 -17
- data/lib/uricp/strategy/local_link.rb +10 -8
- data/lib/uricp/strategy/piped_cache.rb +11 -16
- data/lib/uricp/strategy/piped_cache_convert.rb +14 -18
- data/lib/uricp/strategy/piped_compress.rb +3 -8
- data/lib/uricp/strategy/piped_decompress.rb +7 -11
- data/lib/uricp/strategy/piped_local_compress.rb +0 -4
- data/lib/uricp/strategy/piped_local_decompress.rb +10 -16
- data/lib/uricp/strategy/piped_local_get.rb +0 -5
- data/lib/uricp/strategy/piped_local_put.rb +3 -9
- data/lib/uricp/strategy/piped_rbd_get.rb +30 -0
- data/lib/uricp/strategy/piped_remote_get.rb +20 -20
- data/lib/uricp/strategy/rbd_cache_base_snap.rb +27 -0
- data/lib/uricp/strategy/rbd_cache_check.rb +42 -0
- data/lib/uricp/strategy/rbd_cache_clone.rb +40 -0
- data/lib/uricp/strategy/rbd_cache_upload.rb +40 -0
- data/lib/uricp/strategy/rbd_cached_get.rb +36 -0
- data/lib/uricp/strategy/rbd_cached_put.rb +33 -0
- data/lib/uricp/strategy/rbd_flattener.rb +23 -0
- data/lib/uricp/strategy/rbd_put.rb +38 -0
- data/lib/uricp/strategy/rbd_snap.rb +56 -0
- data/lib/uricp/strategy/rbd_sweeper.rb +23 -0
- data/lib/uricp/strategy/remote_put.rb +11 -17
- data/lib/uricp/strategy/segmented_remote_put.rb +16 -28
- data/lib/uricp/strategy/sweeper.rb +2 -8
- data/lib/uricp/uri_strategy.rb +22 -13
- data/lib/uricp/version.rb +4 -2
- data/lib/uricp.rb +27 -19
- data/uricp.gemspec +3 -3
- data/xenial/Dockerfile +4 -3
- metadata +41 -25
- data/spec/something_spec.rb +0 -5
- data/trusty/Dockerfile +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e77694a18e045d2917d254afcb2db0a2c4cb7d81471d3ccabfe5c232bc340408
|
4
|
+
data.tar.gz: c063c5315485f25194e2f195c821470f0cc840cc242a0f88c174653a3a3bf167
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8af0949b1de2c8c414d8c60f69390ebc5c722189ff9d86b3c0201c3a30aecded256c8c38be244516834ba97ca7e3ee58c325444304f766cef55b11053d018af
|
7
|
+
data.tar.gz: db89854277d707b488ef4c86bad899407445ff62bd9815aa60259f636b473e17905a83bd53b120f287eabe60012cb20681015a45ef752d3d98660ed6e4b01f71
|
data/.rubocop.yml
ADDED
data/Gemfile.lock
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
uricp (0.0.
|
4
|
+
uricp (0.0.20)
|
5
|
+
childprocess (~> 1.0)
|
5
6
|
filesize (= 0.0.2)
|
6
|
-
methadone (~> 2.0.
|
7
|
+
methadone (~> 2.0.2)
|
7
8
|
open4 (~> 1.3.0)
|
8
9
|
sendfile (~> 1.2.0)
|
9
10
|
|
@@ -14,38 +15,33 @@ GEM
|
|
14
15
|
childprocess (>= 0.3.6)
|
15
16
|
cucumber (>= 1.1.1)
|
16
17
|
rspec-expectations (>= 2.7.0)
|
17
|
-
builder (3.2.
|
18
|
-
childprocess (0.
|
19
|
-
|
18
|
+
builder (3.2.4)
|
19
|
+
childprocess (1.0.1)
|
20
|
+
rake (< 13.0)
|
20
21
|
cucumber (1.3.20)
|
21
22
|
builder (>= 2.1.2)
|
22
23
|
diff-lcs (>= 1.1.3)
|
23
24
|
gherkin (~> 2.12)
|
24
25
|
multi_json (>= 1.7.5, < 2.0)
|
25
26
|
multi_test (>= 0.1.2)
|
26
|
-
diff-lcs (1.
|
27
|
-
ffi (1.9.23)
|
27
|
+
diff-lcs (1.4.4)
|
28
28
|
filesize (0.0.2)
|
29
29
|
gherkin (2.12.2)
|
30
30
|
multi_json (~> 1.3)
|
31
31
|
inifile (1.1.0)
|
32
32
|
json (1.8.6)
|
33
|
-
methadone (2.0.
|
33
|
+
methadone (2.0.2)
|
34
34
|
bundler
|
35
|
-
multi_json (1.
|
35
|
+
multi_json (1.15.0)
|
36
36
|
multi_test (0.1.2)
|
37
37
|
open4 (1.3.4)
|
38
|
-
rake (
|
38
|
+
rake (12.3.3)
|
39
39
|
rdoc (4.2.2)
|
40
40
|
json (~> 1.4)
|
41
|
-
rspec (
|
42
|
-
|
43
|
-
rspec-
|
44
|
-
|
45
|
-
rspec-core (2.99.2)
|
46
|
-
rspec-expectations (2.99.2)
|
47
|
-
diff-lcs (>= 1.1.3, < 2.0)
|
48
|
-
rspec-mocks (2.99.4)
|
41
|
+
rspec-expectations (3.10.1)
|
42
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
43
|
+
rspec-support (~> 3.10.0)
|
44
|
+
rspec-support (3.10.2)
|
49
45
|
sendfile (1.2.2)
|
50
46
|
|
51
47
|
PLATFORMS
|
@@ -56,10 +52,9 @@ DEPENDENCIES
|
|
56
52
|
bundler (~> 1.7)
|
57
53
|
cucumber (~> 1.3)
|
58
54
|
inifile (~> 1.1)
|
59
|
-
rake (~>
|
55
|
+
rake (~> 12.3)
|
60
56
|
rdoc (~> 4.2.0)
|
61
|
-
rspec (~> 2.99)
|
62
57
|
uricp!
|
63
58
|
|
64
59
|
BUNDLED WITH
|
65
|
-
1.
|
60
|
+
1.17.3
|
data/Jenkinsfile
CHANGED
@@ -2,6 +2,8 @@ pipeline {
|
|
2
2
|
environment {
|
3
3
|
ORBIT = credentials('ced8ecd0-dbe4-4bf6-bdde-101a661565f5')
|
4
4
|
ORBIT_URL = credentials('c0c95c56-b4e9-45c2-85c5-bf292aef7301')
|
5
|
+
RBD = credentials('9bfb46f5-65eb-40c3-bfda-7ac5fe469ff4')
|
6
|
+
CEPH_MON = credentials('ceph-mon')
|
5
7
|
ORBIT_USER = "${ORBIT_USR}"
|
6
8
|
ORBIT_KEY = "${ORBIT_PSW}"
|
7
9
|
}
|
@@ -14,73 +16,128 @@ pipeline {
|
|
14
16
|
}
|
15
17
|
agent none
|
16
18
|
stages {
|
19
|
+
stage("AlmaLinux 8") {
|
20
|
+
agent {
|
21
|
+
dockerfile {
|
22
|
+
dir 'almalinux8'
|
23
|
+
label "docker"
|
24
|
+
additionalBuildArgs '--build-arg CEPH_MON --build-arg RBD_USR --build-arg RBD_PSW'
|
25
|
+
}
|
26
|
+
}
|
27
|
+
steps {
|
28
|
+
sh 'rbd --id "${RBD_USR}" ls servers'
|
29
|
+
sh 'bundle install --deployment'
|
30
|
+
sh 'bundle exec rake features:new_qemu'
|
31
|
+
}
|
32
|
+
post {
|
33
|
+
always {
|
34
|
+
sh 'bundle exec rake features:clean'
|
35
|
+
}
|
36
|
+
failure {
|
37
|
+
mail to: 'sysadmin@brightbox.co.uk',
|
38
|
+
subject: "Uricp Tests Failed: ${currentBuild.fullDisplayName}",
|
39
|
+
body: "${env.BUILD_URL}"
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
17
43
|
stage("CentOS 7") {
|
18
44
|
agent {
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
45
|
+
dockerfile {
|
46
|
+
dir 'centos7'
|
47
|
+
label "docker"
|
48
|
+
additionalBuildArgs '--build-arg CEPH_MON --build-arg RBD_USR --build-arg RBD_PSW'
|
49
|
+
}
|
23
50
|
}
|
24
51
|
steps {
|
25
|
-
|
26
|
-
|
52
|
+
sh 'rbd --id "${RBD_USR}" ls servers'
|
53
|
+
sh 'bundle install --deployment'
|
54
|
+
sh 'bundle exec rake features:new_qemu'
|
27
55
|
}
|
28
56
|
post {
|
29
57
|
always {
|
30
|
-
|
31
|
-
|
58
|
+
sh 'bundle exec rake features:clean'
|
59
|
+
}
|
60
|
+
failure {
|
61
|
+
mail to: 'sysadmin@brightbox.co.uk',
|
62
|
+
subject: "Uricp Tests Failed: ${currentBuild.fullDisplayName}",
|
63
|
+
body: "${env.BUILD_URL}"
|
64
|
+
}
|
32
65
|
}
|
33
66
|
}
|
34
|
-
stage("
|
67
|
+
stage("Focal, Ruby 2.7.0") {
|
35
68
|
agent {
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
69
|
+
dockerfile {
|
70
|
+
dir 'focal'
|
71
|
+
label "docker"
|
72
|
+
additionalBuildArgs '--build-arg CEPH_MON --build-arg RBD_USR --build-arg RBD_PSW'
|
73
|
+
}
|
40
74
|
}
|
41
75
|
steps {
|
42
|
-
|
43
|
-
|
76
|
+
sh 'rbd --id "${RBD_USR}" ls servers'
|
77
|
+
sh 'bundle install --deployment'
|
78
|
+
sh 'bundle exec rake features:new_qemu'
|
44
79
|
}
|
45
80
|
post {
|
46
81
|
always {
|
47
|
-
|
48
|
-
|
82
|
+
sh 'bundle exec rake features:clean'
|
83
|
+
}
|
84
|
+
failure {
|
85
|
+
mail to: 'sysadmin@brightbox.co.uk',
|
86
|
+
subject: "Uricp Tests Failed: ${currentBuild.fullDisplayName}",
|
87
|
+
body: "${env.BUILD_URL}"
|
88
|
+
}
|
49
89
|
}
|
50
90
|
}
|
51
91
|
stage("Xenial, Ruby 2.3.1") {
|
52
92
|
agent {
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
93
|
+
dockerfile {
|
94
|
+
dir 'xenial'
|
95
|
+
label "docker"
|
96
|
+
}
|
57
97
|
}
|
58
98
|
steps {
|
59
|
-
|
60
|
-
|
99
|
+
sh 'bundle install --deployment'
|
100
|
+
sh 'bundle exec rake features:new_qemu'
|
61
101
|
}
|
62
102
|
post {
|
63
103
|
always {
|
64
|
-
|
65
|
-
|
104
|
+
sh 'bundle exec rake features:clean'
|
105
|
+
}
|
106
|
+
failure {
|
107
|
+
mail to: 'sysadmin@brightbox.co.uk',
|
108
|
+
subject: "Uricp Tests Failed: ${currentBuild.fullDisplayName}",
|
109
|
+
body: "${env.BUILD_URL}"
|
110
|
+
}
|
66
111
|
}
|
67
112
|
}
|
68
113
|
stage("Bionic, Ruby 2.5.1") {
|
69
114
|
agent {
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
115
|
+
dockerfile {
|
116
|
+
dir 'bionic'
|
117
|
+
label "docker"
|
118
|
+
}
|
74
119
|
}
|
75
120
|
steps {
|
76
|
-
|
77
|
-
|
121
|
+
sh 'bundle install --deployment'
|
122
|
+
sh 'bundle exec rake features:new_qemu'
|
78
123
|
}
|
79
124
|
post {
|
80
125
|
always {
|
81
|
-
|
82
|
-
|
126
|
+
sh 'bundle exec rake features:clean'
|
127
|
+
}
|
128
|
+
failure {
|
129
|
+
mail to: 'sysadmin@brightbox.co.uk',
|
130
|
+
subject: "Uricp Tests Failed: ${currentBuild.fullDisplayName}",
|
131
|
+
body: "${env.BUILD_URL}"
|
132
|
+
}
|
83
133
|
}
|
84
134
|
}
|
85
135
|
}
|
136
|
+
post {
|
137
|
+
failure {
|
138
|
+
mail to: 'sysadmin@brightbox.co.uk',
|
139
|
+
subject: "Uricp Tests Failed: ${currentBuild.fullDisplayName}",
|
140
|
+
body: "${env.BUILD_URL}"
|
141
|
+
}
|
142
|
+
}
|
86
143
|
}
|
data/Rakefile
CHANGED
@@ -2,19 +2,19 @@ def dump_load_path
|
|
2
2
|
puts $LOAD_PATH.join("\n")
|
3
3
|
found = nil
|
4
4
|
$LOAD_PATH.each do |path|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
puts "!! no rake_task"
|
14
|
-
end
|
5
|
+
next unless File.exist?(File.join(path, 'rspec'))
|
6
|
+
|
7
|
+
puts "Found rspec in #{path}"
|
8
|
+
if File.exist?(File.join(path, 'rspec', 'core'))
|
9
|
+
puts 'Found core'
|
10
|
+
if File.exist?(File.join(path, 'rspec', 'core', 'rake_task'))
|
11
|
+
puts 'Found rake_task'
|
12
|
+
found = path
|
15
13
|
else
|
16
|
-
puts
|
14
|
+
puts '!! no rake_task'
|
17
15
|
end
|
16
|
+
else
|
17
|
+
puts '!!! no core'
|
18
18
|
end
|
19
19
|
end
|
20
20
|
if found.nil?
|
@@ -26,13 +26,6 @@ end
|
|
26
26
|
require 'bundler'
|
27
27
|
require 'rake/clean'
|
28
28
|
|
29
|
-
begin
|
30
|
-
require 'rspec/core/rake_task'
|
31
|
-
rescue LoadError
|
32
|
-
dump_load_path
|
33
|
-
raise
|
34
|
-
end
|
35
|
-
|
36
29
|
require 'cucumber'
|
37
30
|
require 'cucumber/rake/task'
|
38
31
|
gem 'rdoc' # we need the installed RDoc gem, not the system one
|
@@ -42,13 +35,7 @@ include Rake::DSL
|
|
42
35
|
|
43
36
|
Bundler::GemHelper.install_tasks
|
44
37
|
|
45
|
-
|
46
|
-
RSpec::Core::RakeTask.new do |t|
|
47
|
-
# Put spec opts in a file named .rspec in root
|
48
|
-
end
|
49
|
-
|
50
|
-
|
51
|
-
CUKE_RESULTS = 'results.html'
|
38
|
+
CUKE_RESULTS = 'results.html'.freeze
|
52
39
|
CLEAN << CUKE_RESULTS
|
53
40
|
namespace(:features) do
|
54
41
|
Cucumber::Rake::Task.new(:new_qemu) do |t|
|
@@ -61,14 +48,17 @@ namespace(:features) do
|
|
61
48
|
t.fork = false
|
62
49
|
t.profile = 'old-qemu-image'
|
63
50
|
end
|
51
|
+
Cucumber::Rake::Task.new(:rbd) do |t|
|
52
|
+
t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty --no-source -x"
|
53
|
+
t.fork = false
|
54
|
+
t.profile = 'rbd'
|
55
|
+
end
|
64
56
|
|
65
57
|
task(:clean) do
|
66
58
|
if ENV['ORBIT_USER'] && ENV['ORBIT_KEY']
|
67
|
-
%w
|
68
|
-
sh "swift --quiet --insecure -A #{ENV['ORBIT_URL'] ||
|
69
|
-
|
70
|
-
puts "Delete failed: #{res.exitstatus}"
|
71
|
-
end
|
59
|
+
%w[temp_dlo test_upload].each do |test_file|
|
60
|
+
sh "swift --quiet --insecure -A #{ENV['ORBIT_URL'] || 'https://orbit.gb1.brightbox.com/v1'} -U #{ENV['ORBIT_USER']} -K #{ENV['ORBIT_KEY']} delete #{test_file}" do |ok, res|
|
61
|
+
puts "Delete failed: #{res.exitstatus}" unless ok
|
72
62
|
end
|
73
63
|
end
|
74
64
|
end
|
@@ -76,11 +66,9 @@ namespace(:features) do
|
|
76
66
|
end
|
77
67
|
|
78
68
|
Rake::RDocTask.new do |rd|
|
79
|
-
|
80
|
-
rd.main = "README.rdoc"
|
81
|
-
|
82
|
-
rd.rdoc_files.include("README.rdoc","lib/**/*.rb","bin/**/*")
|
83
|
-
end
|
69
|
+
rd.main = 'README.rdoc'
|
84
70
|
|
85
|
-
|
71
|
+
rd.rdoc_files.include('README.rdoc', 'lib/**/*.rb', 'bin/**/*')
|
72
|
+
end
|
86
73
|
|
74
|
+
task default: [:spec, 'features:new_qemu']
|
@@ -0,0 +1,26 @@
|
|
1
|
+
FROM almalinux:8
|
2
|
+
MAINTAINER support@brightbox.co.uk
|
3
|
+
|
4
|
+
RUN echo "gem: --no-ri --no-rdoc" >> "$HOME/.gemrc"
|
5
|
+
RUN dnf -y install dnf-plugins-core
|
6
|
+
RUN dnf config-manager --add-repo https://repo.almalinux.org/almalinux/8.4/devel/almalinux-devel.repo
|
7
|
+
RUN dnf -y update
|
8
|
+
RUN dnf config-manager --set-enabled powertools,devel
|
9
|
+
RUN dnf -y group install "Development Tools"
|
10
|
+
RUN dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
|
11
|
+
RUN dnf -y install https://www.rdoproject.org/repos/rdo-release.el8.rpm
|
12
|
+
RUN dnf -y install \
|
13
|
+
git \
|
14
|
+
lz4 \
|
15
|
+
qemu-img \
|
16
|
+
ruby-devel \
|
17
|
+
rubygems \
|
18
|
+
rubygem-bundler \
|
19
|
+
python3-swiftclient \
|
20
|
+
ceph-common
|
21
|
+
RUN mkdir -p /etc/ceph
|
22
|
+
ARG RBD_USR=libvirt
|
23
|
+
ARG RBD_PSW
|
24
|
+
ARG CEPH_MON
|
25
|
+
RUN echo -e "[client.$RBD_USR]\nkey = $RBD_PSW\n" > /etc/ceph/ceph.client.$RBD_USR.keyring
|
26
|
+
RUN echo -e "[global]\nmon_host = $CEPH_MON\n" > /etc/ceph/ceph.conf
|
data/bin/uricp
CHANGED
@@ -4,7 +4,7 @@ require 'optparse'
|
|
4
4
|
require 'uri'
|
5
5
|
require 'methadone'
|
6
6
|
require 'filesize'
|
7
|
-
require 'uricp
|
7
|
+
require 'uricp'
|
8
8
|
|
9
9
|
class App
|
10
10
|
include Methadone::Main
|
@@ -52,20 +52,32 @@ class App
|
|
52
52
|
def self.build_command
|
53
53
|
command_sequence = Uricp::UriStrategy.choose_strategy(options)
|
54
54
|
debug "#{self.name} Command sequence is #{command_sequence.inspect}"
|
55
|
-
command_sequence.map
|
55
|
+
command_sequence.map do |c|
|
56
|
+
debug c.class.name
|
57
|
+
c.command
|
58
|
+
end.join('')
|
56
59
|
end
|
57
60
|
|
58
61
|
def self.validate_options
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
"'max-cache' requires 'cache' option"
|
67
|
-
end
|
62
|
+
case
|
63
|
+
when options['from_uri'].path.nil?
|
64
|
+
raise ::OptionParser::InvalidArgument,
|
65
|
+
"'from_uri' has missing path"
|
66
|
+
when options['to_uri'].path.nil?
|
67
|
+
raise ::OptionParser::InvalidArgument,
|
68
|
+
"'to_uri' has missing path"
|
68
69
|
end
|
70
|
+
return if options['cache']
|
71
|
+
|
72
|
+
case
|
73
|
+
when options['target-format']
|
74
|
+
raise ::OptionParser::MissingArgument,
|
75
|
+
"'target-format' requires 'cache' option"
|
76
|
+
when options['max-cache']
|
77
|
+
raise ::OptionParser::MissingArgument,
|
78
|
+
"'max-cache' requires 'cache' option"
|
79
|
+
end
|
80
|
+
|
69
81
|
end
|
70
82
|
|
71
83
|
def self.add_cache_name
|
@@ -109,6 +121,8 @@ class App
|
|
109
121
|
"Compress output")
|
110
122
|
on("--[no-]dry-run",
|
111
123
|
"Show what would be run,", "but don't run the command")
|
124
|
+
on("--[no-]dry-cache",
|
125
|
+
"On dry runs assume the cache is populated")
|
112
126
|
on("--[no-]force",
|
113
127
|
"Always write sparsely")
|
114
128
|
#Arguments
|