docker-api 1.21.2 → 1.21.3
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/lib/docker/util.rb +27 -2
- data/lib/docker/version.rb +1 -1
- data/spec/docker/image_spec.rb +27 -5
- data/spec/support/vcr.rb +1 -1
- data/spec/vcr/Docker_Image/_build_from_dir/with_a_valid_Dockerfile/with_a_block_capturing_build_output/uses_a_cached_version_the_second_time/calls_the_block_and_passes_build_output.yml +96 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f782a3d4812316b9a78a9c9850000409fcf2f58
|
4
|
+
data.tar.gz: 4d7aa0d552a978aefdb81bb9abd161a90b3a598b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ac799a15c88a4113554472df394449e71bd7ff935e65c2b2f5112ea8e8d0e1b65d2f5da1681b81985aa3dd98c4c211427a00ffd4c2805be2b07005f511f0ce45
|
7
|
+
data.tar.gz: c304cc3fc7ac0bc5970e3be2cf718ecb34540ff786a1f3e3196b374ae7566419ae361ba38c32106a5558c53b749ab35c420f1f0e46346ac7daf63771965d40d5
|
data/lib/docker/util.rb
CHANGED
@@ -138,8 +138,8 @@ module Docker::Util
|
|
138
138
|
next unless stat.file?
|
139
139
|
|
140
140
|
unprefixed_file_name = prefixed_file_name[directory.length..-1]
|
141
|
-
|
142
|
-
unprefixed_file_name, stat.mode, stat.size
|
141
|
+
add_file_to_tar(
|
142
|
+
tar, unprefixed_file_name, stat.mode, stat.size, stat.mtime
|
143
143
|
) do |tar_file|
|
144
144
|
IO.copy_stream(File.open(prefixed_file_name, 'rb'), tar_file)
|
145
145
|
end
|
@@ -147,6 +147,31 @@ module Docker::Util
|
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
150
|
+
def add_file_to_tar(tar, name, mode, size, mtime)
|
151
|
+
tar.check_closed
|
152
|
+
|
153
|
+
io = tar.instance_variable_get(:@io)
|
154
|
+
|
155
|
+
name, prefix = tar.split_name(name)
|
156
|
+
|
157
|
+
header = Gem::Package::TarHeader.new(:name => name, :mode => mode,
|
158
|
+
:size => size, :prefix => prefix,
|
159
|
+
:mtime => mtime).to_s
|
160
|
+
|
161
|
+
io.write header
|
162
|
+
os = Gem::Package::TarWriter::BoundedStream.new io, size
|
163
|
+
|
164
|
+
yield os if block_given?
|
165
|
+
|
166
|
+
min_padding = size - os.written
|
167
|
+
io.write("\0" * min_padding)
|
168
|
+
|
169
|
+
remainder = (512 - (size % 512)) % 512
|
170
|
+
io.write("\0" * remainder)
|
171
|
+
|
172
|
+
tar
|
173
|
+
end
|
174
|
+
|
150
175
|
def create_temp_file
|
151
176
|
tempfile_name = Dir::Tmpname.create('out') {}
|
152
177
|
File.open(tempfile_name, 'wb+')
|
data/lib/docker/version.rb
CHANGED
data/spec/docker/image_spec.rb
CHANGED
@@ -564,30 +564,37 @@ describe Docker::Image do
|
|
564
564
|
Docker::Container.create('Image' => image.id,
|
565
565
|
'Cmd' => %w[cat /Dockerfile])
|
566
566
|
end
|
567
|
-
let
|
568
|
-
|
569
|
-
}
|
567
|
+
let(:output) { container.streaming_logs(stdout: true) }
|
568
|
+
|
570
569
|
after(:each) do
|
571
|
-
container.tap(&:wait).remove
|
572
570
|
image.remove(:noprune => true)
|
573
571
|
end
|
574
572
|
|
575
573
|
context 'with no query parameters' do
|
576
574
|
it 'builds the image', :vcr do
|
577
|
-
container.wait
|
575
|
+
container.tap(&:wait).start
|
578
576
|
expect(output).to eq(docker_file.read)
|
579
577
|
end
|
578
|
+
|
579
|
+
after do
|
580
|
+
container.remove
|
581
|
+
end
|
580
582
|
end
|
581
583
|
|
582
584
|
context 'with specifying a repo in the query parameters' do
|
583
585
|
let(:opts) { { "t" => "#{ENV['DOCKER_API_USER']}/debian:from_dir" } }
|
584
586
|
it 'builds the image and tags it', :vcr do
|
587
|
+
container.tap(&:wait).start
|
585
588
|
expect(output).to eq(docker_file.read)
|
586
589
|
image.refresh!
|
587
590
|
expect(image.info["RepoTags"]).to eq(
|
588
591
|
["#{ENV['DOCKER_API_USER']}/debian:from_dir"]
|
589
592
|
)
|
590
593
|
end
|
594
|
+
|
595
|
+
after do
|
596
|
+
container.remove
|
597
|
+
end
|
591
598
|
end
|
592
599
|
|
593
600
|
context 'with a block capturing build output' do
|
@@ -598,6 +605,21 @@ describe Docker::Image do
|
|
598
605
|
image # Create the image variable, which is lazy-loaded by Rspec
|
599
606
|
expect(build_output).to match(/Step 0 : FROM debian:wheezy/)
|
600
607
|
end
|
608
|
+
|
609
|
+
context 'uses a cached version the second time' do
|
610
|
+
let(:build_output_two) { "" }
|
611
|
+
let(:block_two) { Proc.new { |chunk| build_output_two << chunk } }
|
612
|
+
let(:image_two) { subject.build_from_dir(dir, opts, &block_two) }
|
613
|
+
|
614
|
+
it 'calls the block and passes build output', :vcr do
|
615
|
+
image # Create the image variable, which is lazy-loaded by Rspec
|
616
|
+
expect(build_output).to match(/Step 0 : FROM debian:wheezy/)
|
617
|
+
expect(build_output).to_not match(/Using cache/)
|
618
|
+
|
619
|
+
image_two # Create the image_two variable, which is lazy-loaded by Rspec
|
620
|
+
expect(build_output_two).to match(/Using cache/)
|
621
|
+
end
|
622
|
+
end
|
601
623
|
end
|
602
624
|
|
603
625
|
context 'with credentials passed' do
|
data/spec/support/vcr.rb
CHANGED
@@ -4,7 +4,7 @@ require 'docker'
|
|
4
4
|
|
5
5
|
VCR.configure do |c|
|
6
6
|
c.allow_http_connections_when_no_cassette = false
|
7
|
-
c.filter_sensitive_data('<DOCKER_HOST>') { Docker.url
|
7
|
+
c.filter_sensitive_data('<DOCKER_HOST>') { Docker.url }
|
8
8
|
c.filter_sensitive_data('<USERNAME>') { ENV['DOCKER_API_USER'] }
|
9
9
|
c.filter_sensitive_data('<PASSWORD>') { ENV['DOCKER_API_PASS'] }
|
10
10
|
c.filter_sensitive_data('<EMAIL>') { ENV['DOCKER_API_EMAIL'] }
|
@@ -0,0 +1,96 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: "<DOCKER_HOST>/v1.16/build"
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Swipely/Docker-API 1.21.0
|
12
|
+
Content-Type:
|
13
|
+
- application/tar
|
14
|
+
Transfer-Encoding:
|
15
|
+
- chunked
|
16
|
+
X-Registry-Config:
|
17
|
+
- eyJjb25maWdzIjp7IiI6eyJ1c2VybmFtZSI6IiIsInBhc3N3b3JkIjoiIiwiZW1haWwiOiIifX19
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message:
|
22
|
+
headers:
|
23
|
+
Content-Type:
|
24
|
+
- application/json
|
25
|
+
Date:
|
26
|
+
- Fri, 03 Apr 2015 20:19:34 GMT
|
27
|
+
body:
|
28
|
+
encoding: UTF-8
|
29
|
+
string: "{\"stream\":\"Step 0 : FROM debian:wheezy\\n\"}\r\n{\"stream\":\" ---\\u003e
|
30
|
+
1265e16d0c28\\n\"}\r\n{\"stream\":\"Step 1 : ADD . /\\n\"}\r\n{\"stream\":\"
|
31
|
+
---\\u003e 1df5fb96c8b6\\n\"}\r\n{\"stream\":\"Removing intermediate container
|
32
|
+
31c097a22066\\n\"}\r\n{\"stream\":\"Successfully built 1df5fb96c8b6\\n\"}\r\n"
|
33
|
+
http_version:
|
34
|
+
recorded_at: Wed, 08 Apr 2015 15:07:59 GMT
|
35
|
+
- request:
|
36
|
+
method: post
|
37
|
+
uri: "<DOCKER_HOST>/v1.16/build"
|
38
|
+
body:
|
39
|
+
encoding: US-ASCII
|
40
|
+
string: ''
|
41
|
+
headers:
|
42
|
+
User-Agent:
|
43
|
+
- Swipely/Docker-API 1.21.0
|
44
|
+
Content-Type:
|
45
|
+
- application/tar
|
46
|
+
Transfer-Encoding:
|
47
|
+
- chunked
|
48
|
+
X-Registry-Config:
|
49
|
+
- eyJjb25maWdzIjp7IiI6eyJ1c2VybmFtZSI6IiIsInBhc3N3b3JkIjoiIiwiZW1haWwiOiIifX19
|
50
|
+
response:
|
51
|
+
status:
|
52
|
+
code: 200
|
53
|
+
message:
|
54
|
+
headers:
|
55
|
+
Content-Type:
|
56
|
+
- application/json
|
57
|
+
Date:
|
58
|
+
- Fri, 03 Apr 2015 20:19:36 GMT
|
59
|
+
body:
|
60
|
+
encoding: UTF-8
|
61
|
+
string: "{\"stream\":\"Step 0 : FROM debian:wheezy\\n\"}\r\n{\"stream\":\" ---\\u003e
|
62
|
+
1265e16d0c28\\n\"}\r\n{\"stream\":\"Step 1 : ADD . /\\n\"}\r\n{\"stream\":\"
|
63
|
+
---\\u003e Using cache\\n\"}\r\n{\"stream\":\" ---\\u003e 1df5fb96c8b6\\n\"}\r\n{\"stream\":\"Successfully
|
64
|
+
built 1df5fb96c8b6\\n\"}\r\n"
|
65
|
+
http_version:
|
66
|
+
recorded_at: Wed, 08 Apr 2015 15:07:59 GMT
|
67
|
+
- request:
|
68
|
+
method: delete
|
69
|
+
uri: "<DOCKER_HOST>/v1.16/images/1df5fb96c8b6?noprune=true"
|
70
|
+
body:
|
71
|
+
encoding: US-ASCII
|
72
|
+
string: ''
|
73
|
+
headers:
|
74
|
+
User-Agent:
|
75
|
+
- Swipely/Docker-API 1.21.0
|
76
|
+
Content-Type:
|
77
|
+
- text/plain
|
78
|
+
response:
|
79
|
+
status:
|
80
|
+
code: 200
|
81
|
+
message:
|
82
|
+
headers:
|
83
|
+
Content-Type:
|
84
|
+
- application/json
|
85
|
+
Date:
|
86
|
+
- Fri, 03 Apr 2015 20:19:37 GMT
|
87
|
+
Content-Length:
|
88
|
+
- '81'
|
89
|
+
body:
|
90
|
+
encoding: UTF-8
|
91
|
+
string: |-
|
92
|
+
[{"Deleted":"1df5fb96c8b6f0f21cf5898ad17867b80f0b58d2db5859fcc997dfde7d903b56"}
|
93
|
+
]
|
94
|
+
http_version:
|
95
|
+
recorded_at: Wed, 08 Apr 2015 15:07:59 GMT
|
96
|
+
recorded_with: VCR 2.9.2
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docker-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.21.
|
4
|
+
version: 1.21.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Swipely, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: excon
|
@@ -262,6 +262,7 @@ files:
|
|
262
262
|
- spec/vcr/Docker_Image/_build/with_a_valid_Dockerfile/without_query_parameters/builds_an_image.yml
|
263
263
|
- spec/vcr/Docker_Image/_build/with_an_invalid_Dockerfile/throws_a_UnexpectedResponseError.yml
|
264
264
|
- spec/vcr/Docker_Image/_build_from_dir/with_a_valid_Dockerfile/with_a_block_capturing_build_output/calls_the_block_and_passes_build_output.yml
|
265
|
+
- spec/vcr/Docker_Image/_build_from_dir/with_a_valid_Dockerfile/with_a_block_capturing_build_output/uses_a_cached_version_the_second_time/calls_the_block_and_passes_build_output.yml
|
265
266
|
- spec/vcr/Docker_Image/_build_from_dir/with_a_valid_Dockerfile/with_credentials_passed/sends_X-Registry-Config_header.yml
|
266
267
|
- spec/vcr/Docker_Image/_build_from_dir/with_a_valid_Dockerfile/with_no_query_parameters/builds_the_image.yml
|
267
268
|
- spec/vcr/Docker_Image/_build_from_dir/with_a_valid_Dockerfile/with_specifying_a_repo_in_the_query_parameters/builds_the_image_and_tags_it.yml
|
@@ -387,6 +388,7 @@ test_files:
|
|
387
388
|
- spec/vcr/Docker_Image/_build/with_a_valid_Dockerfile/without_query_parameters/builds_an_image.yml
|
388
389
|
- spec/vcr/Docker_Image/_build/with_an_invalid_Dockerfile/throws_a_UnexpectedResponseError.yml
|
389
390
|
- spec/vcr/Docker_Image/_build_from_dir/with_a_valid_Dockerfile/with_a_block_capturing_build_output/calls_the_block_and_passes_build_output.yml
|
391
|
+
- spec/vcr/Docker_Image/_build_from_dir/with_a_valid_Dockerfile/with_a_block_capturing_build_output/uses_a_cached_version_the_second_time/calls_the_block_and_passes_build_output.yml
|
390
392
|
- spec/vcr/Docker_Image/_build_from_dir/with_a_valid_Dockerfile/with_credentials_passed/sends_X-Registry-Config_header.yml
|
391
393
|
- spec/vcr/Docker_Image/_build_from_dir/with_a_valid_Dockerfile/with_no_query_parameters/builds_the_image.yml
|
392
394
|
- spec/vcr/Docker_Image/_build_from_dir/with_a_valid_Dockerfile/with_specifying_a_repo_in_the_query_parameters/builds_the_image_and_tags_it.yml
|