docker-api 1.29.2 → 1.30.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 +4 -4
- data/README.md +48 -0
- data/lib/docker/event.rb +101 -13
- data/lib/docker/version.rb +1 -1
- data/spec/docker/event_spec.rb +85 -26
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ccea9c7feff7598faa3a7454dc4288175b2cd85b
|
4
|
+
data.tar.gz: de4ce8b295ee655a7f5a50e32f381f09a615df22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: be98218b4aad256b5941ce2f512911685a0a3bd150b8c93be429e8ae61a70d6b29056058578139e49f0b96215cdca2dc247264223c9696744d80fe4087d8c401
|
7
|
+
data.tar.gz: 72c9c3bd8ddd07da6e0b2b3b393e6c35e3124ae975d37e26416bec14cea73eca2668e281c8d5a3d053c9503d31d98d55cf18f6099103c3401d3cdcfbb3ddbdb9
|
data/README.md
CHANGED
@@ -324,6 +324,54 @@ container.kill(:signal => "SIGHUP")
|
|
324
324
|
container.top
|
325
325
|
# => [{"PID"=>"4851", "TTY"=>"pts/0", "TIME"=>"00:00:00", "CMD"=>"lxc-start"}]
|
326
326
|
|
327
|
+
# To expose 1234 to bridge
|
328
|
+
# In Dockerfile: EXPOSE 1234/tcp
|
329
|
+
# docker run resulting-image-name
|
330
|
+
Docker::Container.create(
|
331
|
+
'Image' => 'image-name',
|
332
|
+
'HostConfig' => {
|
333
|
+
'PortBindings' => {
|
334
|
+
'1234/tcp' => [{}]
|
335
|
+
}
|
336
|
+
}
|
337
|
+
)
|
338
|
+
|
339
|
+
# To expose 1234 to host with any port
|
340
|
+
# docker run -p 1234 image-name
|
341
|
+
Docker::Container.create(
|
342
|
+
'Image' => 'image-name',
|
343
|
+
'ExposedPorts' => { '1234/tcp' => {} },
|
344
|
+
'HostConfig' => {
|
345
|
+
'PortBindings' => {
|
346
|
+
'1234/tcp' => [{}]
|
347
|
+
}
|
348
|
+
}
|
349
|
+
)
|
350
|
+
|
351
|
+
# To expose 1234 to host with a specified host port
|
352
|
+
# docker run -p 1234:1234 image-name
|
353
|
+
Docker::Container.create(
|
354
|
+
'Image' => 'image-name',
|
355
|
+
'ExposedPorts' => { '1234/tcp' => {} },
|
356
|
+
'HostConfig' => {
|
357
|
+
'PortBindings' => {
|
358
|
+
'1234/tcp' => [{ 'HostPort' => '1234' }]
|
359
|
+
}
|
360
|
+
}
|
361
|
+
)
|
362
|
+
|
363
|
+
# To expose 1234 to host with a specified host port and host IP
|
364
|
+
# docker run -p 192.168.99.100:1234:1234 image-name
|
365
|
+
Docker::Container.create(
|
366
|
+
'Image' => 'image-name',
|
367
|
+
'ExposedPorts' => { '1234/tcp' => {} },
|
368
|
+
'HostConfig' => {
|
369
|
+
'PortBindings' => {
|
370
|
+
'1234/tcp' => [{ 'HostPort' => '1234', 'HostIp' => '192.168.99.100' }]
|
371
|
+
}
|
372
|
+
}
|
373
|
+
)
|
374
|
+
|
327
375
|
# Export a Container. Since an export is typically at least 300M, chunks of the
|
328
376
|
# export are yielded instead of just returning the whole thing.
|
329
377
|
File.open('export.tar', 'w') do |f|
|
data/lib/docker/event.rb
CHANGED
@@ -2,15 +2,26 @@
|
|
2
2
|
class Docker::Event
|
3
3
|
include Docker::Error
|
4
4
|
|
5
|
-
|
5
|
+
# Represents the actor object nested within an event
|
6
|
+
class Actor
|
7
|
+
attr_accessor :ID, :Attributes
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
-
|
9
|
+
def initialize(actor_attributes = {})
|
10
|
+
[:ID, :Attributes].each do |sym|
|
11
|
+
value = actor_attributes[sym]
|
12
|
+
if value.nil?
|
13
|
+
value = actor_attributes[sym.to_s]
|
14
|
+
end
|
15
|
+
send("#{sym}=", value)
|
16
|
+
end
|
10
17
|
|
11
|
-
|
12
|
-
|
13
|
-
|
18
|
+
if self.Attributes.nil?
|
19
|
+
self.Attributes = {}
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
alias_method :id, :ID
|
24
|
+
alias_method :attributes, :Attributes
|
14
25
|
end
|
15
26
|
|
16
27
|
class << self
|
@@ -29,12 +40,89 @@ class Docker::Event
|
|
29
40
|
def new_event(body, remaining, total)
|
30
41
|
return if body.nil? || body.empty?
|
31
42
|
json = Docker::Util.parse_json(body)
|
32
|
-
Docker::Event.new(
|
33
|
-
json['status'],
|
34
|
-
json['id'],
|
35
|
-
json['from'],
|
36
|
-
json['time']
|
37
|
-
)
|
43
|
+
Docker::Event.new(json)
|
38
44
|
end
|
39
45
|
end
|
46
|
+
|
47
|
+
attr_accessor :Type, :Action, :time, :timeNano
|
48
|
+
attr_reader :Actor
|
49
|
+
# Deprecated interface
|
50
|
+
attr_accessor :status, :from
|
51
|
+
|
52
|
+
def initialize(event_attributes = {})
|
53
|
+
[:Type, :Action, :Actor, :time, :timeNano, :status, :from].each do |sym|
|
54
|
+
value = event_attributes[sym]
|
55
|
+
if value.nil?
|
56
|
+
value = event_attributes[sym.to_s]
|
57
|
+
end
|
58
|
+
send("#{sym}=", value)
|
59
|
+
end
|
60
|
+
|
61
|
+
if @Actor.nil?
|
62
|
+
value = event_attributes[:id]
|
63
|
+
if value.nil?
|
64
|
+
value = event_attributes['id']
|
65
|
+
end
|
66
|
+
self.Actor = Actor.new(ID: value)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def ID
|
71
|
+
self.actor.ID
|
72
|
+
end
|
73
|
+
|
74
|
+
def Actor=(actor)
|
75
|
+
return if actor.nil?
|
76
|
+
if actor.is_a? Actor
|
77
|
+
@Actor = actor
|
78
|
+
else
|
79
|
+
@Actor = Actor.new(actor)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
alias_method :type, :Type
|
84
|
+
alias_method :action, :Action
|
85
|
+
alias_method :actor, :Actor
|
86
|
+
alias_method :time_nano, :timeNano
|
87
|
+
alias_method :id, :ID
|
88
|
+
|
89
|
+
def to_s
|
90
|
+
if type.nil? && action.nil?
|
91
|
+
to_s_legacy
|
92
|
+
else
|
93
|
+
to_s_actor_style
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
private
|
98
|
+
|
99
|
+
def to_s_legacy
|
100
|
+
attributes = []
|
101
|
+
attributes << "from=#{from}" unless from.nil?
|
102
|
+
|
103
|
+
unless attributes.empty?
|
104
|
+
attribute_string = "(#{attributes.join(', ')}) "
|
105
|
+
end
|
106
|
+
|
107
|
+
"Docker::Event { #{time} #{status} #{id} #{attribute_string}}"
|
108
|
+
end
|
109
|
+
|
110
|
+
def to_s_actor_style
|
111
|
+
most_accurate_time = if !time_nano.nil?
|
112
|
+
time_nano
|
113
|
+
elsif !time.nil?
|
114
|
+
time
|
115
|
+
end
|
116
|
+
|
117
|
+
attributes = []
|
118
|
+
actor.attributes.each do |attribute, value|
|
119
|
+
attributes << "#{attribute}=#{value}"
|
120
|
+
end
|
121
|
+
|
122
|
+
unless attributes.empty?
|
123
|
+
attribute_string = "(#{attributes.join(', ')}) "
|
124
|
+
end
|
125
|
+
|
126
|
+
"Docker::Event { #{most_accurate_time} #{type} #{action} #{actor.id} #{attribute_string}}"
|
127
|
+
end
|
40
128
|
end
|
data/lib/docker/version.rb
CHANGED
data/spec/docker/event_spec.rb
CHANGED
@@ -1,21 +1,62 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Docker::Event do
|
4
|
+
let(:api_response) do
|
5
|
+
{
|
6
|
+
'Action' => 'start',
|
7
|
+
'Actor' => {
|
8
|
+
'Attributes' => {
|
9
|
+
'image' => 'tianon/true',
|
10
|
+
'name' => 'true-dat'
|
11
|
+
},
|
12
|
+
'ID' => 'bb2c783a32330b726f18d1eb44d80c899ef45771b4f939326e0fefcfc7e05db8'
|
13
|
+
},
|
14
|
+
'Type' => 'container',
|
15
|
+
'from' => 'tianon/true',
|
16
|
+
'id' => 'bb2c783a32330b726f18d1eb44d80c899ef45771b4f939326e0fefcfc7e05db8',
|
17
|
+
'status' => 'start',
|
18
|
+
'time' => 1461083270,
|
19
|
+
'timeNano' => 1461083270652069004
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
4
23
|
describe "#to_s" do
|
5
|
-
|
24
|
+
context 'with an old event' do
|
25
|
+
let(:event) do
|
26
|
+
described_class.new(
|
27
|
+
status: status,
|
28
|
+
id: id,
|
29
|
+
from: from,
|
30
|
+
time: time
|
31
|
+
)
|
32
|
+
end
|
6
33
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
34
|
+
let(:status) { "start" }
|
35
|
+
let(:id) { "398c9f77b5d2" }
|
36
|
+
let(:from) { "debian:wheezy" }
|
37
|
+
let(:time) { 1381956164 }
|
11
38
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
39
|
+
let(:expected_string) {
|
40
|
+
"Docker::Event { #{time} #{status} #{id} (from=#{from}) }"
|
41
|
+
}
|
42
|
+
|
43
|
+
it "equals the expected string" do
|
44
|
+
expect(event.to_s).to eq(expected_string)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'with a new event' do
|
49
|
+
let(:event) { described_class.new(api_response) }
|
16
50
|
|
17
|
-
|
18
|
-
|
51
|
+
let(:expected_string) do
|
52
|
+
'Docker::Event { 1461083270652069004 container start '\
|
53
|
+
'bb2c783a32330b726f18d1eb44d80c899ef45771b4f939326e0fefcfc7e05db8 '\
|
54
|
+
'(image=tianon/true, name=true-dat) }'
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'equals the expected string' do
|
58
|
+
expect(event.to_s).to eq(expected_string)
|
59
|
+
end
|
19
60
|
end
|
20
61
|
end
|
21
62
|
|
@@ -68,22 +109,40 @@ describe Docker::Event do
|
|
68
109
|
end
|
69
110
|
|
70
111
|
describe ".new_event" do
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
112
|
+
context 'with an old api response' do
|
113
|
+
let(:event) { Docker::Event.new_event(response_body, nil, nil) }
|
114
|
+
let(:status) { "start" }
|
115
|
+
let(:id) { "398c9f77b5d2" }
|
116
|
+
let(:from) { "debian:wheezy" }
|
117
|
+
let(:time) { 1381956164 }
|
118
|
+
let(:response_body) {
|
119
|
+
"{\"status\":\"#{status}\",\"id\":\"#{id}\""\
|
120
|
+
",\"from\":\"#{from}\",\"time\":#{time}}"
|
121
|
+
}
|
80
122
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
123
|
+
it "returns a Docker::Event" do
|
124
|
+
expect(event).to be_kind_of(Docker::Event)
|
125
|
+
expect(event.status).to eq(status)
|
126
|
+
expect(event.id).to eq(id)
|
127
|
+
expect(event.from).to eq(from)
|
128
|
+
expect(event.time).to eq(time)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
context 'with a new api response' do
|
133
|
+
let(:event) { Docker::Event.new_event(api_response.to_json, nil, nil) }
|
134
|
+
|
135
|
+
it 'returns a Docker::Event' do
|
136
|
+
expect(event).to be_kind_of(Docker::Event)
|
137
|
+
expect(event.type).to eq('container')
|
138
|
+
expect(event.action).to eq('start')
|
139
|
+
expect(
|
140
|
+
event.actor.id
|
141
|
+
).to eq('bb2c783a32330b726f18d1eb44d80c899ef45771b4f939326e0fefcfc7e05db8')
|
142
|
+
expect(event.actor.attributes).to eq('image' => 'tianon/true', 'name' => 'true-dat')
|
143
|
+
expect(event.time).to eq 1461083270
|
144
|
+
expect(event.time_nano).to eq 1461083270652069004
|
145
|
+
end
|
87
146
|
end
|
88
147
|
end
|
89
148
|
end
|
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.
|
4
|
+
version: 1.30.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Swipely, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: excon
|