uricp 0.0.11 → 0.0.16

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.
Files changed (48) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -1
  3. data/.rubocop.yml +3 -0
  4. data/Gemfile.lock +15 -19
  5. data/Jenkinsfile +113 -0
  6. data/README.md +2 -2
  7. data/Rakefile +26 -31
  8. data/bionic/Dockerfile +20 -0
  9. data/centos7/Dockerfile +20 -0
  10. data/features/auth_download.feature +17 -0
  11. data/features/step_definitions/orbit_steps.rb +19 -13
  12. data/lib/segment_upload.rb +20 -22
  13. data/lib/uricp.rb +3 -29
  14. data/lib/uricp/curl_primitives.rb +31 -33
  15. data/lib/uricp/orbit_auth.rb +23 -27
  16. data/lib/uricp/segmenter.rb +12 -16
  17. data/lib/uricp/strategy/cache_common.rb +11 -11
  18. data/lib/uricp/strategy/cached_get.rb +14 -20
  19. data/lib/uricp/strategy/cleaner.rb +2 -8
  20. data/lib/uricp/strategy/common.rb +27 -19
  21. data/lib/uricp/strategy/local_convert.rb +9 -16
  22. data/lib/uricp/strategy/local_link.rb +10 -8
  23. data/lib/uricp/strategy/piped_cache.rb +7 -13
  24. data/lib/uricp/strategy/piped_cache_convert.rb +14 -18
  25. data/lib/uricp/strategy/piped_compress.rb +3 -8
  26. data/lib/uricp/strategy/piped_decompress.rb +7 -11
  27. data/lib/uricp/strategy/piped_local_compress.rb +0 -4
  28. data/lib/uricp/strategy/piped_local_decompress.rb +11 -17
  29. data/lib/uricp/strategy/piped_local_get.rb +0 -5
  30. data/lib/uricp/strategy/piped_local_put.rb +3 -9
  31. data/lib/uricp/strategy/piped_rbd_get.rb +44 -0
  32. data/lib/uricp/strategy/piped_remote_get.rb +28 -19
  33. data/lib/uricp/strategy/rbd_remote_put.rb +36 -0
  34. data/lib/uricp/strategy/rbd_sweeper.rb +22 -0
  35. data/lib/uricp/strategy/remote_put.rb +11 -17
  36. data/lib/uricp/strategy/segmented_remote_put.rb +16 -28
  37. data/lib/uricp/strategy/sweeper.rb +2 -8
  38. data/lib/uricp/uri_strategy.rb +14 -13
  39. data/lib/uricp/version.rb +2 -2
  40. data/trusty/Dockerfile +20 -0
  41. data/uricp.gemspec +3 -4
  42. data/xenial/Dockerfile +20 -0
  43. metadata +39 -51
  44. data/Dockerfile_centos6.6 +0 -39
  45. data/Dockerfile_centos7 +0 -39
  46. data/Dockerfile_trusty-ruby193 +0 -32
  47. data/README.rdoc +0 -23
  48. data/spec/something_spec.rb +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 054b98cbf8e67b76cc3e2b552677573fe5b5cbea
4
- data.tar.gz: 85337e7757d5d33a03c72860770dbb10eea58bd8
2
+ SHA256:
3
+ metadata.gz: d7db104674249fa9443799b004c877667e22b142d26a7c7a2220ef668865dfbc
4
+ data.tar.gz: d333e085bb1b666e09883fbd9b9006334d6c15acd17ac781629697bcc0766e5a
5
5
  SHA512:
6
- metadata.gz: 3b774aecb700c7e3b290e2fd3a7140baafe012b188a0f5c9d2166539af35c6f79e6f96cfb92056c1858c0e25e465859492e94e2c5317bfa68d7d5b8c210bca9f
7
- data.tar.gz: f4bf7e1dc1c44c0a712720d54e0f86d4ab95f332b3cdfb20c0dcd431d5d65edfbc674921bba6debdcf8290bc0491ee1476a0686456cb0177d936ba141aed9836
6
+ metadata.gz: 7e16104719cca1e2def15b5d9b2d7cbdbcb84b68f7d69a566b8eddd64e699654ea72f066102bb8949e2eb583ffd54aad9549b5094746747382930cf18a1de5a8
7
+ data.tar.gz: b0f839f96f8975ce95121085fdba25ecb1451fc38dbc975de250a6277ffe584a5548f6033138cb46ae8f200a0e6c063e45b2eb25b26ea4e6cefad0d592b91294
data/.gitignore CHANGED
@@ -4,4 +4,5 @@ coverage
4
4
  pkg
5
5
  html
6
6
  *.swp
7
- Dockerfile
7
+ vendor
8
+ .bundle
@@ -0,0 +1,3 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.4
3
+
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- uricp (0.0.11)
4
+ uricp (0.0.16)
5
5
  filesize (= 0.0.2)
6
- methadone (~> 1.8.0)
6
+ methadone (~> 2.0.0)
7
7
  open4 (~> 1.3.0)
8
8
  sendfile (~> 1.2.0)
9
9
 
@@ -14,8 +14,8 @@ GEM
14
14
  childprocess (>= 0.3.6)
15
15
  cucumber (>= 1.1.1)
16
16
  rspec-expectations (>= 2.7.0)
17
- builder (3.2.2)
18
- childprocess (0.5.6)
17
+ builder (3.2.3)
18
+ childprocess (0.9.0)
19
19
  ffi (~> 1.0, >= 1.0.11)
20
20
  cucumber (1.3.20)
21
21
  builder (>= 2.1.2)
@@ -23,29 +23,23 @@ GEM
23
23
  gherkin (~> 2.12)
24
24
  multi_json (>= 1.7.5, < 2.0)
25
25
  multi_test (>= 0.1.2)
26
- diff-lcs (1.2.5)
27
- ffi (1.9.10)
26
+ diff-lcs (1.3)
27
+ ffi (1.9.23)
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
- json (1.8.3)
33
- methadone (1.8.0)
32
+ json (1.8.6)
33
+ methadone (2.0.0)
34
34
  bundler
35
- multi_json (1.11.2)
35
+ multi_json (1.13.1)
36
36
  multi_test (0.1.2)
37
37
  open4 (1.3.4)
38
38
  rake (10.4.2)
39
- rdoc (4.2.0)
39
+ rdoc (4.2.2)
40
40
  json (~> 1.4)
41
- rspec (2.99.0)
42
- rspec-core (~> 2.99.0)
43
- rspec-expectations (~> 2.99.0)
44
- rspec-mocks (~> 2.99.0)
45
- rspec-core (2.99.2)
46
41
  rspec-expectations (2.99.2)
47
42
  diff-lcs (>= 1.1.3, < 2.0)
48
- rspec-mocks (2.99.4)
49
43
  sendfile (1.2.2)
50
44
 
51
45
  PLATFORMS
@@ -56,7 +50,9 @@ DEPENDENCIES
56
50
  bundler (~> 1.7)
57
51
  cucumber (~> 1.3)
58
52
  inifile (~> 1.1)
59
- rake
60
- rdoc
61
- rspec (~> 2.99)
53
+ rake (~> 10.4.0)
54
+ rdoc (~> 4.2.0)
62
55
  uricp!
56
+
57
+ BUNDLED WITH
58
+ 1.16.1
@@ -0,0 +1,113 @@
1
+ pipeline {
2
+ environment {
3
+ ORBIT = credentials('ced8ecd0-dbe4-4bf6-bdde-101a661565f5')
4
+ ORBIT_URL = credentials('c0c95c56-b4e9-45c2-85c5-bf292aef7301')
5
+ ORBIT_USER = "${ORBIT_USR}"
6
+ ORBIT_KEY = "${ORBIT_PSW}"
7
+ }
8
+ options {
9
+ disableConcurrentBuilds()
10
+ buildDiscarder(logRotator(numToKeepStr: '5'))
11
+ }
12
+ triggers {
13
+ cron('@weekly')
14
+ }
15
+ agent none
16
+ stages {
17
+ stage("CentOS 7") {
18
+ agent {
19
+ dockerfile {
20
+ dir 'centos7'
21
+ label "docker"
22
+ }
23
+ }
24
+ steps {
25
+ sh 'bundle install --deployment'
26
+ sh 'bundle exec rake features:new_qemu'
27
+ }
28
+ post {
29
+ always {
30
+ sh 'bundle exec rake features:clean'
31
+ }
32
+ failure {
33
+ mail to: 'sysadmin@brightbox.co.uk',
34
+ subject: "Uricp Tests Failed: ${currentBuild.fullDisplayName}",
35
+ body: "${env.BUILD_URL}"
36
+ }
37
+ }
38
+ }
39
+ stage("Trusty, Ruby 1.9.3") {
40
+ agent {
41
+ dockerfile {
42
+ dir 'trusty'
43
+ label "docker"
44
+ }
45
+ }
46
+ steps {
47
+ sh 'bundle install --deployment'
48
+ sh 'bundle exec rake features:new_qemu'
49
+ }
50
+ post {
51
+ always {
52
+ sh 'bundle exec rake features:clean'
53
+ }
54
+ failure {
55
+ mail to: 'sysadmin@brightbox.co.uk',
56
+ subject: "Uricp Tests Failed: ${currentBuild.fullDisplayName}",
57
+ body: "${env.BUILD_URL}"
58
+ }
59
+ }
60
+ }
61
+ stage("Xenial, Ruby 2.3.1") {
62
+ agent {
63
+ dockerfile {
64
+ dir 'xenial'
65
+ label "docker"
66
+ }
67
+ }
68
+ steps {
69
+ sh 'bundle install --deployment'
70
+ sh 'bundle exec rake features:new_qemu'
71
+ }
72
+ post {
73
+ always {
74
+ sh 'bundle exec rake features:clean'
75
+ }
76
+ failure {
77
+ mail to: 'sysadmin@brightbox.co.uk',
78
+ subject: "Uricp Tests Failed: ${currentBuild.fullDisplayName}",
79
+ body: "${env.BUILD_URL}"
80
+ }
81
+ }
82
+ }
83
+ stage("Bionic, Ruby 2.5.1") {
84
+ agent {
85
+ dockerfile {
86
+ dir 'bionic'
87
+ label "docker"
88
+ }
89
+ }
90
+ steps {
91
+ sh 'bundle install --deployment'
92
+ sh 'bundle exec rake features:new_qemu'
93
+ }
94
+ post {
95
+ always {
96
+ sh 'bundle exec rake features:clean'
97
+ }
98
+ failure {
99
+ mail to: 'sysadmin@brightbox.co.uk',
100
+ subject: "Uricp Tests Failed: ${currentBuild.fullDisplayName}",
101
+ body: "${env.BUILD_URL}"
102
+ }
103
+ }
104
+ }
105
+ }
106
+ post {
107
+ failure {
108
+ mail to: 'sysadmin@brightbox.co.uk',
109
+ subject: "Uricp Tests Failed: ${currentBuild.fullDisplayName}",
110
+ body: "${env.BUILD_URL}"
111
+ }
112
+ }
113
+ }
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Uricp
2
2
 
3
- TODO: Write a gem description
3
+ Copy one URI to another with optional cache
4
4
 
5
5
  ## Installation
6
6
 
@@ -20,7 +20,7 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- TODO: Write usage instructions here
23
+
24
24
 
25
25
  ## Contributing
26
26
 
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
- if File.exists?(File.join(path,"rspec"))
6
- puts "Found rspec in #{path}"
7
- if File.exists?(File.join(path,"rspec","core"))
8
- puts "Found core"
9
- if File.exists?(File.join(path,"rspec","core","rake_task"))
10
- puts "Found rake_task"
11
- found = path
12
- else
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 "!!! no core"
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,22 @@ namespace(:features) do
61
48
  t.fork = false
62
49
  t.profile = 'old-qemu-image'
63
50
  end
51
+
52
+ task(:clean) do
53
+ if ENV['ORBIT_USER'] && ENV['ORBIT_KEY']
54
+ %w[temp_dlo test_upload].each do |test_file|
55
+ 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|
56
+ puts "Delete failed: #{res.exitstatus}" unless ok
57
+ end
58
+ end
59
+ end
60
+ end
64
61
  end
65
62
 
66
63
  Rake::RDocTask.new do |rd|
67
-
68
- rd.main = "README.rdoc"
69
-
70
- rd.rdoc_files.include("README.rdoc","lib/**/*.rb","bin/**/*")
71
- end
64
+ rd.main = 'README.rdoc'
72
65
 
73
- task :default => [:spec,"features:new_qemu"]
66
+ rd.rdoc_files.include('README.rdoc', 'lib/**/*.rb', 'bin/**/*')
67
+ end
74
68
 
69
+ task default: [:spec, 'features:new_qemu']
@@ -0,0 +1,20 @@
1
+ FROM ubuntu:bionic
2
+ MAINTAINER support@brightbox.co.uk
3
+
4
+ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y -qq software-properties-common
5
+
6
+ #RUN apt-add-repository ppa:brightbox/ruby-ng
7
+
8
+ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y -qq \
9
+ build-essential \
10
+ git \
11
+ qemu-utils \
12
+ liblz4-tool \
13
+ curl \
14
+ ruby \
15
+ ruby-dev \
16
+ python-swiftclient \
17
+ ruby-bundler
18
+
19
+ RUN echo "gem: --no-ri --no-rdoc" >> "$HOME/.gemrc"
20
+
@@ -0,0 +1,20 @@
1
+ FROM centos:7
2
+ MAINTAINER support@brightbox.co.uk
3
+
4
+ RUN yum update -y && yum -y install \
5
+ epel-release \
6
+ gcc \
7
+ make \
8
+ git \
9
+ qemu-img \
10
+ ruby-devel \
11
+ rubygems \
12
+ rubygem-bundler
13
+
14
+ RUN yum -y install python-setuptools && \
15
+ easy_install pip && \
16
+ pip install --upgrade setuptools && \
17
+ pip install python-swiftclient
18
+
19
+ RUN echo "gem: --no-ri --no-rdoc" >> "$HOME/.gemrc"
20
+
@@ -37,6 +37,14 @@ Feature: Authenticated download of images from orbit
37
37
  And a 0 byte file named "/tmp/uricp/cache/img-zeroy" should exist
38
38
  And the file named "/tmp/uricp/cache/img-zeroy" should have a file format of "raw"
39
39
 
40
+ Scenario: zero download to raw, cache, size limited
41
+ Given a correctly initialised cache at "/tmp/uricp"
42
+ When I retrieve "img-zeroy" with options "--cache=/tmp/uricp --target-format=raw --max-cache=8MB" from container "test" into "file:////tmp/uricp/srv-testx"
43
+ Then a file named "/tmp/uricp/srv-testx" should exist
44
+ And the file named "/tmp/uricp/srv-testx" should have a file format of "raw"
45
+ And a 0 byte file named "/tmp/uricp/cache/img-zeroy" should exist
46
+ And the file named "/tmp/uricp/cache/img-zeroy" should have a file format of "raw"
47
+
40
48
  Scenario: qcow download convert to raw, cache
41
49
  Given a correctly initialised cache at "/tmp/uricp"
42
50
  When I retrieve "img-qcow2" with options "--target-format=raw --cache=/tmp/uricp" from container "test" into "file:///tmp/uricp/srv-test4"
@@ -143,3 +151,12 @@ Feature: Authenticated download of images from orbit
143
151
  And the file named "/tmp/uricp/srv-testa" should have a file format of "qcow2"
144
152
  And a file named "/tmp/uricp/cache/img-lz4cy" should exist
145
153
  And the file named "/tmp/uricp/cache/img-lz4cy" should have a file format of "lz4"
154
+
155
+ Scenario: lz4 download sparse convert to raw, cache, overwrite file
156
+ Given a correctly initialised cache at "/tmp/uricp"
157
+ And a 102400 byte file named "/tmp/uricp/srv-test9"
158
+ When I retrieve "img-lz4cy" with options "--force --target-format=raw --cache=/tmp/uricp" from container "test" into "file:///tmp/uricp/srv-test9"
159
+ Then a file named "/tmp/uricp/srv-test9" should exist
160
+ And the file named "/tmp/uricp/srv-test9" should have a file format of "raw"
161
+ And a file named "/tmp/uricp/cache/img-lz4cy" should exist
162
+ And the file named "/tmp/uricp/cache/img-lz4cy" should have a file format of "lz4"
@@ -18,17 +18,24 @@ def fetch_orbit_token
18
18
  @current_url_target = ENV['ORBIT_URL'] || 'https://orbit.brightbox.com/v1'
19
19
  cmd = "curl -I #{@current_url_target} -H 'X-Auth-User: #{@clientid}' -H 'X-Auth-Key: #{@key}'"
20
20
  run_simple(unescape(cmd))
21
- stdout_from(cmd).each_line do |line|
21
+ output = stdout_from(cmd)
22
+ output.each_line do |line|
22
23
  key, value = line.strip.split(/\s*:\s*/,2)
23
- @current_auth_token = value if key == 'X-Auth-Token'
24
- @current_storage_url = value if key == 'X-Storage-Url'
24
+ case key.to_s.downcase
25
+ when 'x-auth-token'
26
+ @current_auth_token = value
27
+ when 'x-storage-url'
28
+ @current_storage_url = value
29
+ end
30
+ end
31
+ unless @current_auth_token && @current_storage_url
32
+ raise(RuntimeError, "Credentials not accepted. Can't obtain auth token for tests.\n#{output}")
25
33
  end
26
- raise(RuntimeError, "Credentials not accepted. Can't obtain auth token for tests.") unless @current_auth_token && @current_storage_url
27
34
  end
28
35
 
29
36
  def create_download_file(filetype, name, container)
30
37
  upload_url = File.join(@current_storage_url, container, name)
31
- tempfile = '/tmp/fred55322'
38
+ tempfile = 'fred55322'
32
39
  FileUtils.rm_f(Dir.glob(tempfile+'*'))
33
40
  format = 'raw'
34
41
  size = '1G'
@@ -196,26 +203,25 @@ Then(/^a qcow2 entry should exist in container "(.*?)" called "(.*?)"$/) do |con
196
203
  end
197
204
 
198
205
  Before('@orbit') do
206
+ puts "Running Orbit Before"
199
207
  fetch_orbit_token
200
- unless $orbit_setup
208
+ $first_time ||= false
209
+ unless $first_time
210
+ puts("Clearing up temporary areas")
201
211
  system("swift --quiet --insecure --os-storage-url=#{@current_storage_url} --os-auth-token=#{@current_auth_token} delete test")
202
212
  system("swift --quiet --insecure --os-storage-url=#{@current_storage_url} --os-auth-token=#{@current_auth_token} delete temp_dlo")
203
213
  system("swift --quiet --insecure --os-storage-url=#{@current_storage_url} --os-auth-token=#{@current_auth_token} delete test_upload")
204
- end
205
- end
206
-
207
- Before('@orbitdownloads') do
208
- $orbit_setup ||= false
209
- unless $orbit_setup
214
+ puts("Setting up downloads")
210
215
  create_container('test')
211
216
  create_download_file('qcow2', 'img-qcow2', 'test')
212
217
  create_download_file('lz4', 'img-lz4cy', 'test')
213
218
  create_download_file('zero', 'img-zeroy', 'test')
214
- $orbit_setup = true
219
+ $first_time = true
215
220
  end
216
221
  end
217
222
 
218
223
  After('@orbit') do
224
+ puts "Running Orbit After"
219
225
  if @current_auth_token && @current_container
220
226
  system("swift --quiet --insecure --os-storage-url=#{@current_storage_url} --os-auth-token=#{@current_auth_token} delete #{@current_container} #{@current_name}")
221
227
  @current_container = @current_name = nil