docker-api 1.10.2 → 1.10.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -1
- data/docker-api.gemspec +1 -0
- data/lib/docker.rb +1 -0
- data/lib/docker/error.rb +3 -0
- data/lib/docker/image.rb +20 -10
- data/lib/docker/version.rb +1 -1
- data/spec/docker/image_spec.rb +22 -3
- data/spec/support/vcr.rb +2 -1
- data/spec/vcr/Docker_Image/_import/when_the_argument_is_a_URI/when_the_URI_is_invalid/raises_an_error.yml +144 -0
- data/spec/vcr/Docker_Image/_import/when_the_argument_is_a_URI/when_the_URI_is_valid/returns_an_Image.yml +81 -0
- data/spec/vcr/Docker_Image/_import/when_the_file_does_exist/creates_the_Image.yml +34 -0
- metadata +22 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8cb36a5993a313d48077ee68360b298a3a1d7fb3
|
4
|
+
data.tar.gz: 00bd95c6605e8cd51541c58364421e3b969464b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 923f01064e6a3829bf019e00c2ae73dc99c0e9331d95f1e6058b9cce2f5e42339806017c89998dd3d1c61ddd462f40863a04b2c52f767691006adf8161ccad7b
|
7
|
+
data.tar.gz: 38cf6d35c30a98adcdf1afc992b60d8bd29d6ec10ddbae9a72eefe31e3dad386d556e87309730639467f6cbc01394505132399ed5107f471a4950c5f438eaecc
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@ docker-api
|
|
2
2
|
==========
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/docker-api.png)](http://badge.fury.io/rb/docker-api) [![travis-ci](https://travis-ci.org/swipely/docker-api.png?branch=master)](https://travis-ci.org/swipely/docker-api) [![Code Climate](https://codeclimate.com/github/swipely/docker-api.png)](https://codeclimate.com/github/swipely/docker-api) [![Dependency Status](https://gemnasium.com/swipely/docker-api.png)](https://gemnasium.com/swipely/docker-api)
|
4
4
|
|
5
|
-
This gem provides an object-oriented interface to the [Docker Remote API](http://docs.docker.io/en/latest/reference/api/docker_remote_api/). Every method listed there is implemented, with the exception of attaching to the STDIN of a Container. At the time of this writing, docker-api is meant to interface with Docker version 0.
|
5
|
+
This gem provides an object-oriented interface to the [Docker Remote API](http://docs.docker.io/en/latest/reference/api/docker_remote_api/). Every method listed there is implemented, with the exception of attaching to the STDIN of a Container. At the time of this writing, docker-api is meant to interface with Docker version 0.9.*.
|
6
6
|
|
7
7
|
If you're interested in using Docker to package your apps, we recommend the [dockly](https://github.com/swipely/dockly) gem. Dockly provides a simple DSL for describing Docker containers that install as Debian packages and are controlled by upstart scripts.
|
8
8
|
|
@@ -147,6 +147,16 @@ image.remove(:force => true)
|
|
147
147
|
Docker::Image.import('some-export.tar')
|
148
148
|
# => Docker::Image { :id => 66b712aef, :connection => Docker::Connection { :url => http://localhost, :options => {:port=>4243} } }
|
149
149
|
|
150
|
+
# `Docker::Image.import` can also import from a URI
|
151
|
+
Docker::Image.import('http://some-site.net/my-image.tar')
|
152
|
+
# => Docker::Image { :id => 6b462b2d2, :connection => Docker::Connection { :url => http://localhost, :options => {:port=>4243} } }
|
153
|
+
|
154
|
+
# For a lower-level interface for importing tars, `Docker::Image.import_stream` may be used.
|
155
|
+
# It accepts a block, and will call that block until it returns an empty `String`.
|
156
|
+
File.open('my-export.tar') do |file|
|
157
|
+
Docker::Image.import_stream { file.read(1000).to_s }
|
158
|
+
end
|
159
|
+
|
150
160
|
# Create an Image from a Dockerfile as a String.
|
151
161
|
Docker::Image.build("from base\nrun touch /test")
|
152
162
|
# => Docker::Image { :id => b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc, :connection => Docker::Connection { :url => http://localhost, :options => {:port=>4243} } }
|
data/docker-api.gemspec
CHANGED
data/lib/docker.rb
CHANGED
data/lib/docker/error.rb
CHANGED
data/lib/docker/image.rb
CHANGED
@@ -136,19 +136,29 @@ class Docker::Image
|
|
136
136
|
hashes.map { |hash| new(connection, 'id' => hash['name']) }
|
137
137
|
end
|
138
138
|
|
139
|
-
# Import an Image from the output of Docker::Container#export.
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
'Transfer-Encoding' => 'chunked' }
|
147
|
-
) { io.read(Excon.defaults[:chunk_size]).to_s }
|
148
|
-
new(connection, 'id'=> Docker::Util.parse_json(body)['status'])
|
139
|
+
# Import an Image from the output of Docker::Container#export. The first
|
140
|
+
# argument may either be a File or URI.
|
141
|
+
def import(imp, opts = {}, conn = Docker.connection)
|
142
|
+
open(imp) do |io|
|
143
|
+
import_stream(opts, conn) do
|
144
|
+
io.read(Excon.defaults[:chunk_size]).to_s
|
145
|
+
end
|
149
146
|
end
|
147
|
+
rescue StandardError
|
148
|
+
raise Docker::Error::IOError, "Could not import '#{imp}'"
|
150
149
|
end
|
151
150
|
|
151
|
+
def import_stream(options = {}, connection = Docker.connection, &block)
|
152
|
+
body = connection.post(
|
153
|
+
'/images/create',
|
154
|
+
options.merge('fromSrc' => '-'),
|
155
|
+
:headers => { 'Content-Type' => 'application/tar',
|
156
|
+
'Transfer-Encoding' => 'chunked' },
|
157
|
+
&block
|
158
|
+
)
|
159
|
+
new(connection, 'id'=> Docker::Util.parse_json(body)['status'])
|
160
|
+
end
|
161
|
+
|
152
162
|
# Given a Dockerfile as a string, builds an Image.
|
153
163
|
def build(commands, opts = {}, connection = Docker.connection, &block)
|
154
164
|
body = ""
|
data/lib/docker/version.rb
CHANGED
data/spec/docker/image_spec.rb
CHANGED
@@ -275,22 +275,41 @@ describe Docker::Image do
|
|
275
275
|
|
276
276
|
it 'raises an error' do
|
277
277
|
expect { subject.import(file) }
|
278
|
-
|
278
|
+
.to raise_error(Docker::Error::IOError)
|
279
279
|
end
|
280
280
|
end
|
281
281
|
|
282
282
|
context 'when the file does exist' do
|
283
283
|
let(:file) { 'spec/fixtures/export.tar' }
|
284
|
+
let(:body) { StringIO.new }
|
284
285
|
|
285
|
-
before {
|
286
|
+
before { Docker::Image.stub(:open).with(file).and_yield(body) }
|
286
287
|
|
287
288
|
it 'creates the Image', :vcr do
|
288
|
-
pending 'This works, but recording a streaming request breaks VCR'
|
289
289
|
import = subject.import(file)
|
290
290
|
import.should be_a Docker::Image
|
291
291
|
import.id.should_not be_nil
|
292
292
|
end
|
293
293
|
end
|
294
|
+
|
295
|
+
context 'when the argument is a URI' do
|
296
|
+
context 'when the URI is invalid' do
|
297
|
+
it 'raises an error', :vcr do
|
298
|
+
expect { subject.import('http://google.com') }
|
299
|
+
.to raise_error(Docker::Error::IOError)
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
context 'when the URI is valid' do
|
304
|
+
let(:uri) { 'http://swipely-pub.s3.amazonaws.com/ubuntu.tar' }
|
305
|
+
|
306
|
+
it 'returns an Image', :vcr do
|
307
|
+
image = subject.import(uri)
|
308
|
+
image.should be_a Docker::Image
|
309
|
+
image.id.should_not be_nil
|
310
|
+
end
|
311
|
+
end
|
312
|
+
end
|
294
313
|
end
|
295
314
|
|
296
315
|
describe '.all' do
|
data/spec/support/vcr.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
require 'vcr'
|
2
|
+
require 'webmock'
|
2
3
|
|
3
4
|
VCR.configure do |c|
|
4
5
|
c.allow_http_connections_when_no_cassette = false
|
5
|
-
c.hook_into :excon
|
6
|
+
c.hook_into :excon, :webmock
|
6
7
|
c.cassette_library_dir = File.join(File.dirname(__FILE__), '..', 'vcr')
|
7
8
|
c.configure_rspec_metadata!
|
8
9
|
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://google.com/
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 301
|
19
|
+
message: Moved Permanently
|
20
|
+
headers:
|
21
|
+
Location:
|
22
|
+
- http://www.google.com/
|
23
|
+
Content-Type:
|
24
|
+
- text/html; charset=UTF-8
|
25
|
+
Date:
|
26
|
+
- Fri, 21 Mar 2014 20:11:15 GMT
|
27
|
+
Expires:
|
28
|
+
- Sun, 20 Apr 2014 20:11:15 GMT
|
29
|
+
Cache-Control:
|
30
|
+
- public, max-age=2592000
|
31
|
+
Server:
|
32
|
+
- gws
|
33
|
+
Content-Length:
|
34
|
+
- '219'
|
35
|
+
X-Xss-Protection:
|
36
|
+
- 1; mode=block
|
37
|
+
X-Frame-Options:
|
38
|
+
- SAMEORIGIN
|
39
|
+
Alternate-Protocol:
|
40
|
+
- 80:quic
|
41
|
+
body:
|
42
|
+
encoding: UTF-8
|
43
|
+
string: "<HTML><HEAD><meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\">\n<TITLE>301
|
44
|
+
Moved</TITLE></HEAD><BODY>\n<H1>301 Moved</H1>\nThe document has moved\n<A
|
45
|
+
HREF=\"http://www.google.com/\">here</A>.\r\n</BODY></HTML>\r\n"
|
46
|
+
http_version:
|
47
|
+
recorded_at: Fri, 21 Mar 2014 20:11:19 GMT
|
48
|
+
- request:
|
49
|
+
method: get
|
50
|
+
uri: http://www.google.com/
|
51
|
+
body:
|
52
|
+
encoding: US-ASCII
|
53
|
+
string: ''
|
54
|
+
headers:
|
55
|
+
Accept-Encoding:
|
56
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
57
|
+
Accept:
|
58
|
+
- "*/*"
|
59
|
+
User-Agent:
|
60
|
+
- Ruby
|
61
|
+
response:
|
62
|
+
status:
|
63
|
+
code: 200
|
64
|
+
message: OK
|
65
|
+
headers:
|
66
|
+
Date:
|
67
|
+
- Fri, 21 Mar 2014 20:11:15 GMT
|
68
|
+
Expires:
|
69
|
+
- "-1"
|
70
|
+
Cache-Control:
|
71
|
+
- private, max-age=0
|
72
|
+
Content-Type:
|
73
|
+
- text/html; charset=ISO-8859-1
|
74
|
+
Set-Cookie:
|
75
|
+
- NID=67=Vlb8snIxYpxY5tZzIccxxSX93Tp-Kk2h4V0l3Jil6Qv7fGPXDl6fpyijgLA8M7upzNZBUogCx8yi4yj8u8XHYxsNDU3d91kpF5_y4FpNuLdKx343IPieJT1S-XZuJqzh;
|
76
|
+
expires=Sat, 20-Sep-2014 20:11:15 GMT; path=/; domain=.google.com; HttpOnly
|
77
|
+
- PREF=ID=e9956e864b3c8e0a:FF=0:TM=1395432675:LM=1395432675:S=XCuFngWpuYmW5qaT;
|
78
|
+
expires=Sun, 20-Mar-2016 20:11:15 GMT; path=/; domain=.google.com
|
79
|
+
P3p:
|
80
|
+
- CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657
|
81
|
+
for more info."
|
82
|
+
Server:
|
83
|
+
- gws
|
84
|
+
X-Xss-Protection:
|
85
|
+
- 1; mode=block
|
86
|
+
X-Frame-Options:
|
87
|
+
- SAMEORIGIN
|
88
|
+
Alternate-Protocol:
|
89
|
+
- 80:quic
|
90
|
+
Transfer-Encoding:
|
91
|
+
- chunked
|
92
|
+
body:
|
93
|
+
encoding: UTF-8
|
94
|
+
string: |-
|
95
|
+
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage"><head><meta content="Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for." name="description"><meta content="noodp" name="robots"><meta content="/images/google_favicon_128.png" itemprop="image"><title>Google</title><script>(function(){
|
96
|
+
window.google={kEI:"45wsU-LIHqLcyQHF6YDQBg",getEI:function(a){for(var b;a&&(!a.getAttribute||!(b=a.getAttribute("eid")));)a=a.parentNode;return b||google.kEI},https:function(){return"https:"==window.location.protocol},kEXPI:"4006,17259,4000116,4007661,4007830,4008067,4008133,4008142,4009033,4009565,4009641,4010297,4010806,4010858,4010899,4011228,4011258,4011679,4012373,4012504,4012507,4013338,4013374,4013414,4013416,4013591,4013723,4013747,4013758,4013787,4013823,4013966,4013979,4014016,4014431,4014515,4014636,4014649,4014671,4014792,4014813,4014991,4015119,4015155,4015234,4015260,4015319,4015444,4015497,4015514,4015517,4015582,4015589,4015637,4015638,4015690,4015772,4015853,4015904,4015991,4016007,4016047,4016062,4016138,4016167,4016193,4016283,4016297,4016304,4016311,4016388,8300007,8300015,8300018,8500149,8500157,10200002,10200012,10200014,10200029,10200030,10200040,10200048,10200053,10200055,10200066,10200083,10200103,10200120,10200134,10200155,10200157",kCSI:{e:"4006,17259,4000116,4007661,4007830,4008067,4008133,4008142,4009033,4009565,4009641,4010297,4010806,4010858,4010899,4011228,4011258,4011679,4012373,4012504,4012507,4013338,4013374,4013414,4013416,4013591,4013723,4013747,4013758,4013787,4013823,4013966,4013979,4014016,4014431,4014515,4014636,4014649,4014671,4014792,4014813,4014991,4015119,4015155,4015234,4015260,4015319,4015444,4015497,4015514,4015517,4015582,4015589,4015637,4015638,4015690,4015772,4015853,4015904,4015991,4016007,4016047,4016062,4016138,4016167,4016193,4016283,4016297,4016304,4016311,4016388,8300007,8300015,8300018,8500149,8500157,10200002,10200012,10200014,10200029,10200030,10200040,10200048,10200053,10200055,10200066,10200083,10200103,10200120,10200134,10200155,10200157",ei:"45wsU-LIHqLcyQHF6YDQBg"},authuser:0,ml:function(){},kHL:"en",time:function(){return(new Date).getTime()},log:function(a,b,c,h,k){var d=
|
97
|
+
new Image,f=google.lc,e=google.li,g="";d.onerror=d.onload=d.onabort=function(){delete f[e]};f[e]=d;c||-1!=b.search("&ei=")||(g="&ei="+google.getEI(h));c=c||"/"+(k||"gen_204")+"?atyp=i&ct="+a+"&cad="+b+g+"&zx="+google.time();a=/^http:/i;a.test(c)&&google.https()?(google.ml(Error("GLMM"),!1,{src:c}),delete f[e]):(d.src=c,google.li=e+1)},lc:[],li:0,y:{},x:function(a,b){google.y[a.id]=[a,b];return!1},load:function(a,b,c){google.x({id:a+l++},function(){google.load(a,b,c)})}};var l=0;})();
|
98
|
+
(function(){google.sn="webhp";google.timers={};google.startTick=function(a,b){google.timers[a]={t:{start:google.time()},bfr:!!b}};google.tick=function(a,b,g){google.timers[a]||google.startTick(a);google.timers[a].t[b]=g||google.time()};google.startTick("load",!0);
|
99
|
+
try{}catch(d){}})();
|
100
|
+
var _gjwl=location;function _gjuc(){var a=_gjwl.href.indexOf("#");if(0<=a&&(a=_gjwl.href.substring(a),0<a.indexOf("&q=")||0<=a.indexOf("#q="))&&(a=a.substring(1),-1==a.indexOf("#"))){for(var d=0;d<a.length;){var b=d;"&"==a.charAt(b)&&++b;var c=a.indexOf("&",b);-1==c&&(c=a.length);b=a.substring(b,c);if(0==b.indexOf("fp="))a=a.substring(0,d)+a.substring(c,a.length),c=d;else if("cad=h"==b)return 0;d=c}_gjwl.href="/search?"+a+"&cad=h";return 1}return 0}
|
101
|
+
function _gjh(){!_gjuc()&&window.google&&google.x&&google.x({id:"GJH"},function(){google.nav&&google.nav.gjh&&google.nav.gjh()})};
|
102
|
+
window._gjh&&_gjh();</script><style>#gbar,#guser{font-size:13px;padding-top:1px !important;}#gbar{height:22px}#guser{padding-bottom:7px !important;text-align:right}.gbh,.gbd{border-top:1px solid #c9d7f1;font-size:1px}.gbh{height:0;position:absolute;top:24px;width:100%}@media all{.gb1{height:22px;margin-right:.5em;vertical-align:top}#gbar{float:left}}a.gb1,a.gb4{text-decoration:underline !important}a.gb1,a.gb4{color:#00c !important}.gbi .gb4{color:#dd8e27 !important}.gbf .gb4{color:#900 !important}</style><style>body,td,a,p,.h{font-family:arial,sans-serif}body{margin:0;overflow-y:scroll}#gog{padding:3px 8px 0}td{line-height:.8em}.gac_m td{line-height:17px}form{margin-bottom:20px}.h{color:#36c}.q{color:#00c}.ts td{padding:0}.ts{border-collapse:collapse}em{font-weight:bold;font-style:normal}.lst{height:25px;width:496px}.gsfi,.lst{font:18px arial,sans-serif}.gsfs{font:17px arial,sans-serif}.ds{display:inline-box;display:inline-block;margin:3px 0 4px;margin-left:4px}input{font-family:inherit}a.gb1,a.gb2,a.gb3,a.gb4{color:#11c !important}body{background:#fff;color:black}a{color:#11c;text-decoration:none}a:hover,a:active{text-decoration:underline}.fl a{color:#36c}a:visited{color:#551a8b}a.gb1,a.gb4{text-decoration:underline}a.gb3:hover{text-decoration:none}#ghead a.gb2:hover{color:#fff !important}.sblc{padding-top:5px}.sblc a{display:block;margin:2px 0;margin-left:13px;font-size:11px}.lsbb{background:#eee;border:solid 1px;border-color:#ccc #999 #999 #ccc;height:30px}.lsbb{display:block}.ftl,#fll a{display:inline-block;margin:0 12px}.lsb{background:url(/images/srpr/nav_logo80.png) 0 -258px repeat-x;border:none;color:#000;cursor:pointer;height:30px;margin:0;outline:0;font:15px arial,sans-serif;vertical-align:top}.lsb:active{background:#ccc}.lst:focus{outline:none}#addlang a{padding:0 3px}</style><script></script></head><body bgcolor="#fff"><script>(function(){var src='/images/nav_logo176.png';var iesg=false;document.body.onload = function(){window.n && window.n();if (document.images){new Image().src=src;}
|
103
|
+
if (!iesg){document.f&&document.f.q.focus();document.gbqf&&document.gbqf.q.focus();}
|
104
|
+
}
|
105
|
+
})();</script><textarea id="csi" style="display:none"></textarea><div id="mngb"> <div id=gbar><nobr><b class=gb1>Search</b> <a class=gb1 href="http://www.google.com/imghp?hl=en&tab=wi">Images</a> <a class=gb1 href="http://maps.google.com/maps?hl=en&tab=wl">Maps</a> <a class=gb1 href="https://play.google.com/?hl=en&tab=w8">Play</a> <a class=gb1 href="http://www.youtube.com/?tab=w1">YouTube</a> <a class=gb1 href="http://news.google.com/nwshp?hl=en&tab=wn">News</a> <a class=gb1 href="https://mail.google.com/mail/?tab=wm">Gmail</a> <a class=gb1 href="https://drive.google.com/?tab=wo">Drive</a> <a class=gb1 style="text-decoration:none" href="http://www.google.com/intl/en/options/"><u>More</u> »</a></nobr></div><div id=guser width=100%><nobr><span id=gbn class=gbi></span><span id=gbf class=gbf></span><span id=gbe></span><a href="http://www.google.com/history/optout?hl=en" class=gb4>Web History</a> | <a href="/preferences?hl=en" class=gb4>Settings</a> | <a target=_top id=gb_70 href="https://accounts.google.com/ServiceLogin?hl=en&continue=http://www.google.com/" class=gb4>Sign in</a></nobr></div><div class=gbh style=left:0></div><div class=gbh style=right:0></div> </div><center><br clear="all" id="lgpd"><div id="lga"><img alt="Google" height="95" src="/images/srpr/logo9w.png" style="padding:28px 0 14px" width="269" id="hplogo" onload="window.lol&&lol()"><br><br></div><form action="/search" name="f"><table cellpadding="0" cellspacing="0"><tr valign="top"><td width="25%"> </td><td align="center" nowrap=""><input name="ie" value="ISO-8859-1" type="hidden"><input value="en" name="hl" type="hidden"><input name="source" type="hidden" value="hp"><div class="ds" style="height:32px;margin:4px 0"><input style="color:#000;margin:0;padding:5px 8px 0 6px;vertical-align:top" autocomplete="off" class="lst" value="" title="Google Search" maxlength="2048" name="q" size="57"></div><br style="line-height:0"><span class="ds"><span class="lsbb"><input class="lsb" value="Google Search" name="btnG" type="submit"></span></span><span class="ds"><span class="lsbb"><input class="lsb" value="I'm Feeling Lucky" name="btnI" onclick="if(this.form.q.value)this.checked=1; else top.location='/doodles/'" type="submit"></span></span></td><td class="fl sblc" align="left" nowrap="" width="25%"><a href="/advanced_search?hl=en&authuser=0">Advanced search</a><a href="/language_tools?hl=en&authuser=0">Language tools</a></td></tr></table><input id="gbv" name="gbv" type="hidden" value="1"></form><div id="gac_scont"></div><div style="font-size:83%;min-height:3.5em"><br></div><span id="footer"><div style="font-size:10pt"><div style="margin:19px auto;text-align:center" id="fll"><a href="/intl/en/ads/">Advertising Programs</a><a href="/services/">Business Solutions</a><a href="https://plus.google.com/116899029375914044550" rel="publisher">+Google</a><a href="/intl/en/about.html">About Google</a></div></div><p style="color:#767676;font-size:8pt">© 2013 - <a href="/intl/en/policies/">Privacy & Terms</a></p></span></center><div id=xjsd></div><div id=xjsi data-jiis="bp"><script>if(google.y)google.y.first=[];(function(){function b(a){window.setTimeout(function(){var c=document.createElement("script");c.src=a;document.getElementById("xjsd").appendChild(c)},0)}google.dljp=function(a){google.xjsu=a;b(a)};google.dlj=b;})();
|
106
|
+
if(!google.xjs){window._=window._||{};window._._DumpException=function(e){throw e};if(google.timers&&google.timers.load.t){google.timers.load.t.xjsls=new Date().getTime();}google.dljp('/xjs/_/js/k\x3dxjs.hp.en_US.X67G-1Nbjpc.O/m\x3dsb_he,pcc/rt\x3dj/d\x3d1/sv\x3d1/rs\x3dAItRSTO_vkVhEK6twEUdYclvmSrFcRL-Zw');google.xjs=1;}google.pmc={"sb_he":{"agen":true,"cgen":true,"client":"heirloom-hp","dh":true,"ds":"","eqch":true,"fl":true,"host":"google.com","jsonp":true,"msgs":{"dym":"Did you mean:","lcky":"I\u0026#39;m Feeling Lucky","lml":"Learn more","oskt":"Input tools","psrc":"This search was removed from your \u003Ca href=\"/history\"\u003EWeb History\u003C/a\u003E","psrl":"Remove","sbit":"Search by image","srch":"Google Search"},"ovr":{},"pq":"","qcpw":false,"scd":10,"sce":5,"stok":"77Ky_m1xumgNELaxgYSWyY2PMaw"},"pcc":{}};google.y.first.push(function(){if(google.med){google.med('init');google.initHistory();google.med('history');}});if(google.j&&google.j.en&&google.j.xi){window.setTimeout(google.j.xi,0);}</script></div><script>(function(){if(google.timers&&google.timers.load.t){var b,c,d,e,g=function(a,f){a.removeEventListener?(a.removeEventListener("load",f,!1),a.removeEventListener("error",f,!1)):(a.detachEvent("onload",f),a.detachEvent("onerror",f))},h=function(a){e=(new Date).getTime();++c;a=a||window.event;a=a.target||a.srcElement;g(a,h)},k=document.getElementsByTagName("img");b=k.length;for(var l=c=0,m;l<b;++l)m=k[l],m.complete||"string"!=typeof m.src||!m.src?++c:m.addEventListener?(m.addEventListener("load",h,!1),m.addEventListener("error",
|
107
|
+
h,!1)):(m.attachEvent("onload",h),m.attachEvent("onerror",h));d=b-c;var n=function(){if(google.timers.load.t){google.timers.load.t.ol=(new Date).getTime();google.timers.load.t.iml=e;google.kCSI.imc=c;google.kCSI.imn=b;google.kCSI.imp=d;void 0!==google.stt&&(google.kCSI.stt=google.stt);google.csiReport&&google.csiReport()}};window.addEventListener?window.addEventListener("load",n,!1):window.attachEvent&&
|
108
|
+
window.attachEvent("onload",n);google.timers.load.t.prt=e=(new Date).getTime()};})();
|
109
|
+
</script></body></html>
|
110
|
+
http_version:
|
111
|
+
recorded_at: Fri, 21 Mar 2014 20:11:19 GMT
|
112
|
+
- request:
|
113
|
+
method: post
|
114
|
+
uri: unix:///var/run/docker.sock/v1.10/images/create?fromSrc=-
|
115
|
+
body:
|
116
|
+
encoding: US-ASCII
|
117
|
+
string: ''
|
118
|
+
headers:
|
119
|
+
User-Agent:
|
120
|
+
- Swipely/Docker-API 1.10.2
|
121
|
+
Content-Type:
|
122
|
+
- application/tar
|
123
|
+
Transfer-Encoding:
|
124
|
+
- chunked
|
125
|
+
response:
|
126
|
+
status:
|
127
|
+
code: 500
|
128
|
+
message:
|
129
|
+
headers:
|
130
|
+
Content-Type:
|
131
|
+
- text/plain; charset=utf-8
|
132
|
+
Date:
|
133
|
+
- Fri, 21 Mar 2014 20:11:20 GMT
|
134
|
+
Content-Length:
|
135
|
+
- '32'
|
136
|
+
Connection:
|
137
|
+
- close
|
138
|
+
body:
|
139
|
+
encoding: UTF-8
|
140
|
+
string: |
|
141
|
+
archive/tar: invalid tar header
|
142
|
+
http_version:
|
143
|
+
recorded_at: Fri, 21 Mar 2014 20:11:20 GMT
|
144
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,81 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://swipely-pub.s3.amazonaws.com/ubuntu.tar
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
X-Amz-Id-2:
|
22
|
+
- gDzbfLKbcGI0aVhR6ZPCtlGh6XdtjCg8B1Q6kv45cNhLAmJ0TqX9nN1UDc6G9bc8
|
23
|
+
X-Amz-Request-Id:
|
24
|
+
- 8A710A4CEED81061
|
25
|
+
Date:
|
26
|
+
- Fri, 21 Mar 2014 20:09:59 GMT
|
27
|
+
X-Amz-Meta-S3cmd-Attrs:
|
28
|
+
- uid:1000/gname:thulihan/uname:thulihan/gid:1000/mode:33188/mtime:1395427962/atime:1395427960/md5:dd5c4a8854498b18f70022b98231f10e/ctime:1395427962
|
29
|
+
Last-Modified:
|
30
|
+
- Fri, 21 Mar 2014 18:53:20 GMT
|
31
|
+
Etag:
|
32
|
+
- "\"378fd3b78cc4f5afee7e47e9a948ef3f-14\""
|
33
|
+
Accept-Ranges:
|
34
|
+
- bytes
|
35
|
+
Content-Type:
|
36
|
+
- application/x-tar
|
37
|
+
Content-Length:
|
38
|
+
- '215523328'
|
39
|
+
Server:
|
40
|
+
- AmazonS3
|
41
|
+
body:
|
42
|
+
encoding: ASCII-8BIT
|
43
|
+
string: !binary |-
|
44
|
+
Li8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
45
|
+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
46
|
+
AAAAAAAAAAAAADAwNDA3NTUAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDAwMDAw
|
47
|
+
ADEyMzEzMTA1MTQ3ADAwNzQwMgAgNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
48
|
+
http_version:
|
49
|
+
recorded_at: Fri, 21 Mar 2014 20:10:55 GMT
|
50
|
+
- request:
|
51
|
+
method: post
|
52
|
+
uri: unix:///var/run/docker.sock/v1.10/images/create?fromSrc=-
|
53
|
+
body:
|
54
|
+
encoding: US-ASCII
|
55
|
+
string: ''
|
56
|
+
headers:
|
57
|
+
User-Agent:
|
58
|
+
- Swipely/Docker-API 1.10.2
|
59
|
+
Content-Type:
|
60
|
+
- application/tar
|
61
|
+
Transfer-Encoding:
|
62
|
+
- chunked
|
63
|
+
response:
|
64
|
+
status:
|
65
|
+
code: 200
|
66
|
+
message:
|
67
|
+
headers:
|
68
|
+
Content-Type:
|
69
|
+
- application/json
|
70
|
+
Date:
|
71
|
+
- Fri, 21 Mar 2014 20:10:59 GMT
|
72
|
+
Connection:
|
73
|
+
- close
|
74
|
+
Transfer-Encoding:
|
75
|
+
- ''
|
76
|
+
body:
|
77
|
+
encoding: UTF-8
|
78
|
+
string: "{\"status\":\"334a5c3837719bdc4872d1356a1c0ba72c0ad8ac2793979f136f8247180b3436\"}\r\n"
|
79
|
+
http_version:
|
80
|
+
recorded_at: Fri, 21 Mar 2014 20:10:59 GMT
|
81
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,34 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: unix:///var/run/docker.sock/v1.10/images/create?fromSrc=-
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Swipely/Docker-API 1.10.2
|
12
|
+
Content-Type:
|
13
|
+
- application/tar
|
14
|
+
Transfer-Encoding:
|
15
|
+
- chunked
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message:
|
20
|
+
headers:
|
21
|
+
Content-Type:
|
22
|
+
- application/json
|
23
|
+
Date:
|
24
|
+
- Fri, 21 Mar 2014 19:20:00 GMT
|
25
|
+
Connection:
|
26
|
+
- close
|
27
|
+
Transfer-Encoding:
|
28
|
+
- ''
|
29
|
+
body:
|
30
|
+
encoding: UTF-8
|
31
|
+
string: "{\"status\":\"98464da2f481d80419b9c79758b804f9589aa0bc94f935f7a7acb009d1cfffec\"}\r\n"
|
32
|
+
http_version:
|
33
|
+
recorded_at: Fri, 21 Mar 2014 19:20:00 GMT
|
34
|
+
recorded_with: VCR 2.8.0
|
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.10.
|
4
|
+
version: 1.10.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: 2014-03-
|
11
|
+
date: 2014-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: excon
|
@@ -136,6 +136,20 @@ dependencies:
|
|
136
136
|
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: webmock
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
139
153
|
description: A simple REST client for the Docker Remote API
|
140
154
|
email:
|
141
155
|
- tomhulihan@swipely.com
|
@@ -214,6 +228,9 @@ files:
|
|
214
228
|
- spec/vcr/Docker_Image/_create/when_the_Image_does_not_yet_exist_and_the_body_is_a_Hash/sets_the_id_and_sends_Docker_creds.yml
|
215
229
|
- spec/vcr/Docker_Image/_get/when_the_image_does_exist/returns_the_new_image.yml
|
216
230
|
- spec/vcr/Docker_Image/_history/returns_the_history_of_the_Image.yml
|
231
|
+
- spec/vcr/Docker_Image/_import/when_the_argument_is_a_URI/when_the_URI_is_invalid/raises_an_error.yml
|
232
|
+
- spec/vcr/Docker_Image/_import/when_the_argument_is_a_URI/when_the_URI_is_valid/returns_an_Image.yml
|
233
|
+
- spec/vcr/Docker_Image/_import/when_the_file_does_exist/creates_the_Image.yml
|
217
234
|
- spec/vcr/Docker_Image/_insert/inserts_the_url_s_file_into_a_new_Image.yml
|
218
235
|
- spec/vcr/Docker_Image/_insert_local/when_removing_intermediate_containers/creates_a_new_image.yml
|
219
236
|
- spec/vcr/Docker_Image/_insert_local/when_removing_intermediate_containers/leave_no_intermediate_containers.yml
|
@@ -304,6 +321,9 @@ test_files:
|
|
304
321
|
- spec/vcr/Docker_Image/_create/when_the_Image_does_not_yet_exist_and_the_body_is_a_Hash/sets_the_id_and_sends_Docker_creds.yml
|
305
322
|
- spec/vcr/Docker_Image/_get/when_the_image_does_exist/returns_the_new_image.yml
|
306
323
|
- spec/vcr/Docker_Image/_history/returns_the_history_of_the_Image.yml
|
324
|
+
- spec/vcr/Docker_Image/_import/when_the_argument_is_a_URI/when_the_URI_is_invalid/raises_an_error.yml
|
325
|
+
- spec/vcr/Docker_Image/_import/when_the_argument_is_a_URI/when_the_URI_is_valid/returns_an_Image.yml
|
326
|
+
- spec/vcr/Docker_Image/_import/when_the_file_does_exist/creates_the_Image.yml
|
307
327
|
- spec/vcr/Docker_Image/_insert/inserts_the_url_s_file_into_a_new_Image.yml
|
308
328
|
- spec/vcr/Docker_Image/_insert_local/when_removing_intermediate_containers/creates_a_new_image.yml
|
309
329
|
- spec/vcr/Docker_Image/_insert_local/when_removing_intermediate_containers/leave_no_intermediate_containers.yml
|