dockerapi 0.12.0 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/Gemfile.lock +1 -1
- data/README.md +10 -5
- data/dockerapi.gemspec +1 -1
- data/lib/docker/api/base.rb +57 -29
- data/lib/docker/api/config.rb +0 -4
- data/lib/docker/api/container.rb +0 -22
- data/lib/docker/api/exec.rb +0 -4
- data/lib/docker/api/image.rb +186 -148
- data/lib/docker/api/network.rb +0 -6
- data/lib/docker/api/node.rb +0 -4
- data/lib/docker/api/plugin.rb +0 -6
- data/lib/docker/api/secret.rb +0 -4
- data/lib/docker/api/service.rb +0 -6
- data/lib/docker/api/swarm.rb +0 -6
- data/lib/docker/api/system.rb +0 -2
- data/lib/docker/api/task.rb +0 -2
- data/lib/docker/api/version.rb +1 -1
- data/lib/docker/api/volume.rb +0 -4
- data/lib/dockerapi.rb +136 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0dac991f7f237b1df6314bae40e54a5f44175186bbbb6756184c65862bb9f652
|
4
|
+
data.tar.gz: 604ea213a309219a91b6923e89e8003eb030fff51d22104e8c689872264ebd59
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5f2eb58e059da1f60de416b07902e538ad707ec1a95a4efb665073d3b54a3ab74ea101144f9cea51effd50610ece9e0011061c653d848855885399bcb6b1cdd
|
7
|
+
data.tar.gz: 98e253a61bd7c2ff36df30f9e3557d4c502e10e206c7b5a32d2969e9ec996151741a5bda5a46ef32426905236228caaba57485250a7f7561fb98cd2181052b86
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
# 0.13.0
|
2
|
+
|
3
|
+
Add default behavior for file read, write and output to stdout. Whenever a method can receive a block, this default behavior can be replaced.
|
4
|
+
|
5
|
+
The following `Docker::API::Image` methods that can now receive a block:
|
6
|
+
* export (write file)
|
7
|
+
* create (output to stdout)
|
8
|
+
* build (output to stdout)
|
9
|
+
|
10
|
+
Default output to stdout can be supressed by setting `Docker::API::PRINT_TO_STDOUT` to `false`
|
11
|
+
|
12
|
+
Method parameters `params` and `body` will be automatically evaluated whenever they are present in the method's signature.
|
13
|
+
|
1
14
|
# 0.12.0
|
2
15
|
|
3
16
|
Add `Docker::API::Plugin` methods:
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -75,13 +75,16 @@ image.prune(filters: {dangling: {"false": true}})
|
|
75
75
|
image.commit(container: container, repo: "my/image", tag: "latest", comment: "Comment from commit", author: "dockerapi", pause: false )
|
76
76
|
|
77
77
|
# Build image from a local tar file
|
78
|
-
image.build("/path/to/file.tar")
|
78
|
+
image.build("/path/to/file.tar", {t: "tag"})
|
79
|
+
|
80
|
+
# Build image using private repository
|
81
|
+
image.build("/path/to/file.tar", {t: "tag"}, {"https://index.docker.io/v1/" => {username: "janedoe", password: "janedoe"}})
|
79
82
|
|
80
83
|
# Build image from a remote tar file
|
81
|
-
image.build(nil, remote: "https://url.to/file.tar")
|
84
|
+
image.build(nil, {remote: "https://url.to/file.tar", t: "tag"})
|
82
85
|
|
83
86
|
# Build image from a remote Dockerfile
|
84
|
-
image.build(nil, remote: "https://url.to/Dockerfile")
|
87
|
+
image.build(nil, {remote: "https://url.to/Dockerfile", t: "tag"})
|
85
88
|
|
86
89
|
# Delete builder cache
|
87
90
|
image.delete_cache
|
@@ -506,7 +509,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
506
509
|
|
507
510
|
| Class | Tests | Implementation | Refactoring |
|
508
511
|
|---|---|---|---|
|
509
|
-
| Image | Ok | Ok |
|
512
|
+
| Image | Ok | Ok | Ok |
|
510
513
|
| Container | Ok | Ok | 8/14 |
|
511
514
|
| Volume | Ok | Ok | 8/21 |
|
512
515
|
| Network | Ok | Ok | 8/21 |
|
@@ -519,7 +522,9 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
519
522
|
| Secret | Ok | Ok | 9/4 |
|
520
523
|
| Config | Ok | Ok | 9/4 |
|
521
524
|
| Distribution | Ok | Ok | 9/4 |
|
522
|
-
| Plugin | Ok |
|
525
|
+
| Plugin | Ok | Ok | 9/4 |
|
526
|
+
|
527
|
+
Add doc in these files: `base`, `connection`, `error`, `response`, `dockerapi`
|
523
528
|
|
524
529
|
## Contributing
|
525
530
|
|
data/dockerapi.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
# Specify which files should be added to the gem when it is released.
|
20
20
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
21
21
|
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
22
|
-
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|resources)/}) }
|
22
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|resources)/}) }.append("doc")
|
23
23
|
end
|
24
24
|
spec.bindir = "exe"
|
25
25
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
data/lib/docker/api/base.rb
CHANGED
@@ -1,38 +1,66 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
class Base
|
1
|
+
class Docker::API::Base
|
2
|
+
|
4
3
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
def initialize connection = nil
|
5
|
+
raise Docker::API::Error.new("Expected connection to be a Docker::API::Connection class") if connection != nil && !connection.is_a?(Docker::API::Connection)
|
6
|
+
@connection = connection || Docker::API::Connection.new
|
7
|
+
|
8
|
+
(self.methods - Object.methods).each do |method|
|
9
|
+
params_index = method(method).parameters.map{|ar| ar[1]}.index(:params)
|
10
|
+
body_index = method(method).parameters.map{|ar| ar[1]}.index(:body)
|
11
11
|
|
12
|
-
|
13
|
-
"
|
12
|
+
define_singleton_method(method) do |*args, &block|
|
13
|
+
validate Docker::API::InvalidParameter, Docker::API::VALID_PARAMS["#{self.class.name}"]["#{method}"], (args[params_index] || {}) if params_index
|
14
|
+
validate Docker::API::InvalidRequestBody, Docker::API::VALID_BODY["#{self.class.name}"]["#{method}"], (args[body_index] || {}) if body_index
|
15
|
+
super(*args,&block)
|
14
16
|
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
15
21
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
22
|
+
def default_streamer
|
23
|
+
streamer = lambda do |chunk, remaining_bytes, total_bytes|
|
24
|
+
p chunk.to_s.encode('UTF-8', invalid: :replace, undef: :replace, replace: '?') if Docker::API::PRINT_TO_STDOUT
|
25
|
+
end
|
26
|
+
streamer
|
27
|
+
end
|
21
28
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
29
|
+
def default_writer path
|
30
|
+
streamer = lambda do |chunk, remaining_bytes, total_bytes|
|
31
|
+
return if "#{chunk}".match(/(No such image)/)
|
32
|
+
file = File.open(File.expand_path(path), "wb+")
|
33
|
+
file.write(chunk)
|
34
|
+
file.close
|
35
|
+
end
|
36
|
+
streamer
|
37
|
+
end
|
30
38
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
39
|
+
def default_reader path, url, header = {"Content-Type" => "application/x-tar"}, &block
|
40
|
+
file = File.open(File.expand_path(path), "r")
|
41
|
+
response = @connection.request(method: :post, path: url , headers: header, request_block: lambda { file.read(Excon.defaults[:chunk_size]).to_s}, response_block: block_given? ? block.call : default_streamer )
|
42
|
+
file.close
|
43
|
+
response
|
44
|
+
end
|
35
45
|
|
36
|
-
|
46
|
+
def validate error, permitted, params
|
47
|
+
return if params[:skip_validation]
|
48
|
+
unpermitted = params.keys.map(&:to_s) - permitted.map(&:to_s)
|
49
|
+
raise error.new(permitted, unpermitted) if unpermitted.size > 0
|
50
|
+
end
|
51
|
+
|
52
|
+
## Converts Ruby Hash into query parameters
|
53
|
+
## In general, the format is key=value
|
54
|
+
## If value is another Hash, it should keep a json syntax {key:value}
|
55
|
+
def hash_to_params h
|
56
|
+
p = []
|
57
|
+
h.delete_if{ | k, v | k.to_s == "skip_validation" }.each { |k,v| p.push( v.is_a?(Hash) ? "#{k}=#{v.to_json}" : "#{k}=#{v}") }
|
58
|
+
p.join("&").gsub(" ","")
|
59
|
+
end
|
60
|
+
|
61
|
+
def build_path path, params = {}
|
62
|
+
p = path.is_a?(Array) ? ([base_path] << path).join("/") : path # TODO: this line to be removed?
|
63
|
+
params.size > 0 ? [p, hash_to_params(params)].join("?") : p
|
37
64
|
end
|
65
|
+
|
38
66
|
end
|
data/lib/docker/api/config.rb
CHANGED
@@ -13,7 +13,6 @@ class Docker::API::Config < Docker::API::Base
|
|
13
13
|
#
|
14
14
|
# @param params [Hash]: Parameters that are appended to the URL.
|
15
15
|
def list params = {}
|
16
|
-
validate Docker::API::InvalidParameter, [:filters], params
|
17
16
|
@connection.get(build_path("/configs",params))
|
18
17
|
end
|
19
18
|
|
@@ -25,7 +24,6 @@ class Docker::API::Config < Docker::API::Base
|
|
25
24
|
#
|
26
25
|
# @param body [Hash]: Request body to be sent as json.
|
27
26
|
def create body = {}
|
28
|
-
validate Docker::API::InvalidRequestBody, [:Name, :Labels, :Data, :Templating], body
|
29
27
|
@connection.request(method: :post, path: "/configs/create", headers: {"Content-Type": "application/json"}, body: body.to_json)
|
30
28
|
end
|
31
29
|
|
@@ -52,8 +50,6 @@ class Docker::API::Config < Docker::API::Base
|
|
52
50
|
#
|
53
51
|
# @param body [Hash]: Request body to be sent as json.
|
54
52
|
def update name, params = {}, body = {}
|
55
|
-
validate Docker::API::InvalidParameter, [:version], params
|
56
|
-
validate Docker::API::InvalidRequestBody, [:Name, :Labels, :Data, :Driver, :Templating], body
|
57
53
|
@connection.request(method: :post, path: build_path("/configs/#{name}/update",params), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
58
54
|
end
|
59
55
|
|
data/lib/docker/api/container.rb
CHANGED
@@ -1,22 +1,16 @@
|
|
1
1
|
module Docker
|
2
2
|
module API
|
3
|
-
CreateBody = [:Hostname,:Domainname,:User,:AttachStdin,:AttachStdout,:AttachStderr,:ExposedPorts,:Tty,:OpenStdin,:StdinOnce,:Env,:Cmd,:HealthCheck,:ArgsEscaped,:Image,:Volumes,:WorkingDir,:Entrypoint,:NetworkDisabled,:MacAddress,:OnBuild,:Labels,:StopSignal,:StopTimeout,:Shell,:HostConfig,:NetworkingConfig]
|
4
|
-
UpdateBody = [:CpuShares, :Memory, :CgroupParent, :BlkioWeight, :BlkioWeightDevice, :BlkioWeightReadBps, :BlkioWeightWriteBps, :BlkioWeightReadOps, :BlkioWeightWriteOps, :CpuPeriod, :CpuQuota, :CpuRealtimePeriod, :CpuRealtimeRuntime, :CpusetCpus, :CpusetMems, :Devices, :DeviceCgroupRules, :DeviceRequest, :Kernel, :Memory, :KernelMemoryTCP, :MemoryReservation, :MemorySwap, :MemorySwappiness, :NanoCPUs, :OomKillDisable, :Init, :PidsLimit, :ULimits, :CpuCount, :CpuPercent, :IOMaximumIOps, :IOMaximumBandwidth, :RestartPolicy]
|
5
|
-
|
6
3
|
class Container < Docker::API::Base
|
7
4
|
|
8
5
|
def list params = {}
|
9
|
-
validate Docker::API::InvalidParameter, [:all, :limit, :size, :filters], params
|
10
6
|
@connection.get(build_path(["json"], params))
|
11
7
|
end
|
12
8
|
|
13
9
|
def details name, params = {}
|
14
|
-
validate Docker::API::InvalidParameter, [:size], params
|
15
10
|
@connection.get(build_path([name, "json"], params))
|
16
11
|
end
|
17
12
|
|
18
13
|
def top name, params = {}
|
19
|
-
validate Docker::API::InvalidParameter, [:ps_args], params
|
20
14
|
@connection.get(build_path([name, "top"], params))
|
21
15
|
end
|
22
16
|
|
@@ -25,47 +19,38 @@ module Docker
|
|
25
19
|
end
|
26
20
|
|
27
21
|
def start name, params = {}
|
28
|
-
validate Docker::API::InvalidParameter, [:detachKeys], params
|
29
22
|
@connection.post(build_path([name, "start"], params))
|
30
23
|
end
|
31
24
|
|
32
25
|
def stop name, params = {}
|
33
|
-
validate Docker::API::InvalidParameter, [:t], params
|
34
26
|
@connection.post(build_path([name, "stop"], params))
|
35
27
|
end
|
36
28
|
|
37
29
|
def restart name, params = {}
|
38
|
-
validate Docker::API::InvalidParameter, [:t], params
|
39
30
|
@connection.post(build_path([name, "restart"], params))
|
40
31
|
end
|
41
32
|
|
42
33
|
def kill name, params = {}
|
43
|
-
validate Docker::API::InvalidParameter, [:signal], params
|
44
34
|
@connection.post(build_path([name, "kill"], params))
|
45
35
|
end
|
46
36
|
|
47
37
|
def wait name, params = {}
|
48
|
-
validate Docker::API::InvalidParameter, [:condition], params
|
49
38
|
@connection.post(build_path([name, "wait"], params))
|
50
39
|
end
|
51
40
|
|
52
41
|
def update name, body = {}
|
53
|
-
validate Docker::API::InvalidRequestBody, Docker::API::UpdateBody, body
|
54
42
|
@connection.request(method: :post, path: build_path([name, "update"]), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
55
43
|
end
|
56
44
|
|
57
45
|
def rename name, params = {}
|
58
|
-
validate Docker::API::InvalidParameter, [:name], params
|
59
46
|
@connection.post(build_path([name, "rename"], params))
|
60
47
|
end
|
61
48
|
|
62
49
|
def resize name, params = {}
|
63
|
-
validate Docker::API::InvalidParameter, [:w, :h], params
|
64
50
|
@connection.post(build_path([name, "resize"], params))
|
65
51
|
end
|
66
52
|
|
67
53
|
def prune params = {}
|
68
|
-
validate Docker::API::InvalidParameter, [:filters], params
|
69
54
|
@connection.post(build_path(["prune"], params))
|
70
55
|
end
|
71
56
|
|
@@ -78,12 +63,10 @@ module Docker
|
|
78
63
|
end
|
79
64
|
|
80
65
|
def remove name, params = {}
|
81
|
-
validate Docker::API::InvalidParameter, [:v, :force, :link], params
|
82
66
|
@connection.delete(build_path([name]))
|
83
67
|
end
|
84
68
|
|
85
69
|
def logs name, params = {}
|
86
|
-
validate Docker::API::InvalidParameter, [:follow, :stdout, :stderr, :since, :until, :timestamps, :tail], params
|
87
70
|
|
88
71
|
path = build_path([name, "logs"], params)
|
89
72
|
|
@@ -95,18 +78,14 @@ module Docker
|
|
95
78
|
end
|
96
79
|
|
97
80
|
def attach name, params = {}
|
98
|
-
validate Docker::API::InvalidParameter, [:detachKeys, :logs, :stream, :stdin, :stdout, :stderr], params
|
99
81
|
@connection.request(method: :post, path: build_path([name, "attach"], params) , response_block: lambda { |chunk, remaining_bytes, total_bytes| puts chunk.inspect })
|
100
82
|
end
|
101
83
|
|
102
84
|
def create params = {}, body = {}
|
103
|
-
validate Docker::API::InvalidParameter, [:name], params
|
104
|
-
validate Docker::API::InvalidRequestBody, Docker::API::CreateBody, body
|
105
85
|
@connection.request(method: :post, path: build_path(["create"], params), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
106
86
|
end
|
107
87
|
|
108
88
|
def stats name, params = {}
|
109
|
-
validate Docker::API::InvalidParameter, [:stream], params
|
110
89
|
path = build_path([name, "stats"], params)
|
111
90
|
|
112
91
|
if params[:stream] == true || params[:stream] == 1
|
@@ -133,7 +112,6 @@ module Docker
|
|
133
112
|
end
|
134
113
|
|
135
114
|
def archive name, file, params = {}
|
136
|
-
validate Docker::API::InvalidParameter, [:path, :noOverwriteDirNonDir, :copyUIDGID], params
|
137
115
|
|
138
116
|
begin # File exists on disk, send it to container
|
139
117
|
file = File.open( File.expand_path( file ) , "r")
|
data/lib/docker/api/exec.rb
CHANGED
@@ -3,13 +3,10 @@ module Docker
|
|
3
3
|
class Exec < Docker::API::Base
|
4
4
|
|
5
5
|
def create name, body = {}
|
6
|
-
validate Docker::API::InvalidRequestBody, [:AttachStdin, :AttachStdout, :AttachStderr, :DetachKeys, :Tty, :Env, :Cmd, :Privileged, :User, :WorkingDir], body
|
7
6
|
@connection.request(method: :post, path: "/containers/#{name}/exec", headers: {"Content-Type": "application/json"}, body: body.to_json )
|
8
7
|
end
|
9
8
|
|
10
9
|
def start name, body = {}
|
11
|
-
validate Docker::API::InvalidRequestBody, [:Detach, :Tty], body
|
12
|
-
|
13
10
|
stream = ""
|
14
11
|
response = @connection.request(method: :post,
|
15
12
|
path: "/exec/#{name}/start",
|
@@ -22,7 +19,6 @@ module Docker
|
|
22
19
|
end
|
23
20
|
|
24
21
|
def resize name, params = {}
|
25
|
-
validate Docker::API::InvalidParameter, [:w, :h], params
|
26
22
|
@connection.post(build_path("/exec/#{name}/resize", params))
|
27
23
|
end
|
28
24
|
|
data/lib/docker/api/image.rb
CHANGED
@@ -1,152 +1,190 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
response = @connection.request(method: :post, path: build_path("/build", params), headers: header)
|
126
|
-
end
|
127
|
-
response
|
128
|
-
end
|
129
|
-
|
130
|
-
def delete_cache params = {}
|
131
|
-
validate Docker::API::InvalidParameter, [:all, "keep-storage", :filters], params
|
132
|
-
@connection.post(build_path("/build/prune", params))
|
133
|
-
end
|
134
|
-
|
135
|
-
#################################################
|
136
|
-
# Items in this area to be removed before 1.0.0 #
|
137
|
-
#################################################
|
138
|
-
def base_path
|
139
|
-
"/images"
|
140
|
-
end
|
141
|
-
|
142
|
-
def inspect *args
|
143
|
-
return super.inspect if args.size == 0
|
144
|
-
warn "WARNING: #inspect is deprecated and will be removed in the future, please use #details instead."
|
145
|
-
name = args[0]
|
146
|
-
details(name)
|
147
|
-
end
|
148
|
-
#################################################
|
1
|
+
##
|
2
|
+
# This class represents the Docker API endpoints regarding images.
|
3
|
+
# @see https://docs.docker.com/engine/api/v1.40/#tag/Image
|
4
|
+
class Docker::API::Image < Docker::API::Base
|
5
|
+
|
6
|
+
##
|
7
|
+
# Return low-level information about an image.
|
8
|
+
# Docker API: GET /images/{name}/json
|
9
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/ImageInspect
|
10
|
+
#
|
11
|
+
# @param name [String]: The ID or name of the image.
|
12
|
+
def details name
|
13
|
+
@connection.get("/images/#{name}/json")
|
14
|
+
end
|
15
|
+
|
16
|
+
##
|
17
|
+
# Return image digest and platform information by contacting the registry.
|
18
|
+
# Docker API: GET /distribution/{name}/json
|
19
|
+
# @see https://docs.docker.com/engine/api/v1.40/#tag/Distribution
|
20
|
+
#
|
21
|
+
# @param name [String]: The ID or name of the image.
|
22
|
+
def distribution name
|
23
|
+
@connection.get("/distribution/#{name}/json")
|
24
|
+
end
|
25
|
+
|
26
|
+
##
|
27
|
+
# Return parent layers of an image.
|
28
|
+
# Docker API: GET /images/{name}/history
|
29
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/ImageHistory
|
30
|
+
#
|
31
|
+
# @param name [String]: The ID or name of the image.
|
32
|
+
def history name
|
33
|
+
@connection.get("/images/#{name}/history")
|
34
|
+
end
|
35
|
+
|
36
|
+
##
|
37
|
+
# Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image.
|
38
|
+
# Docker API: GET /images/json
|
39
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/ImageList
|
40
|
+
#
|
41
|
+
# @param params [Hash]: Parameters that are appended to the URL.
|
42
|
+
def list params = {}
|
43
|
+
@connection.get(build_path("/images/json", params))
|
44
|
+
end
|
45
|
+
|
46
|
+
##
|
47
|
+
# Search for an image on Docker Hub.
|
48
|
+
# Docker API: GET /images/search
|
49
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/ImageSearch
|
50
|
+
#
|
51
|
+
# @param params [Hash]: Parameters that are appended to the URL.
|
52
|
+
def search params = {}
|
53
|
+
@connection.get(build_path("/images/search", params))
|
54
|
+
end
|
55
|
+
|
56
|
+
##
|
57
|
+
# Tag an image so that it becomes part of a repository.
|
58
|
+
# Docker API: POST /images/{name}/tag
|
59
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/ImageTag
|
60
|
+
#
|
61
|
+
# @param name [String]: The ID or name of the image.
|
62
|
+
# @param params [Hash]: Parameters that are appended to the URL.
|
63
|
+
def tag name, params = {}
|
64
|
+
@connection.post(build_path("/images/#{name}/tag", params))
|
65
|
+
end
|
66
|
+
|
67
|
+
##
|
68
|
+
# Delete unused images.
|
69
|
+
# Docker API: POST /images/prune
|
70
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/ImagePrune
|
71
|
+
#
|
72
|
+
# @param params [Hash]: Parameters that are appended to the URL.
|
73
|
+
def prune params = {}
|
74
|
+
@connection.post(build_path("/images/prune", params))
|
75
|
+
end
|
76
|
+
|
77
|
+
##
|
78
|
+
# Remove an image, along with any untagged parent images that were referenced by that image.
|
79
|
+
# Images can't be removed if they have descendant images, are being used by a running container or are being used by a build.
|
80
|
+
# Docker API: DELETE /images/{name}
|
81
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/ImageDelete
|
82
|
+
#
|
83
|
+
# @param name [String]: The ID or name of the image.
|
84
|
+
# @param params [Hash]: Parameters that are appended to the URL.
|
85
|
+
def remove name, params = {}
|
86
|
+
@connection.delete(build_path("/images/#{name}", params))
|
87
|
+
end
|
88
|
+
|
89
|
+
##
|
90
|
+
# Export an image.
|
91
|
+
# Docker API: GET /images/{name}/get
|
92
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/ImageGet
|
93
|
+
#
|
94
|
+
# @param name [String]: The ID or name of the image.
|
95
|
+
# @param path [Hash]: Parameters that are appended to the URL.
|
96
|
+
# @param block [Hash]: Request body to be sent as json.
|
97
|
+
# @block: Replace the default file writing method.
|
98
|
+
def export name, path = "exported_image", &block
|
99
|
+
@connection.request(method: :get, path: build_path("/images/#{name}/get") , response_block: block_given? ? block.call : default_writer(path))
|
100
|
+
end
|
101
|
+
|
102
|
+
##
|
103
|
+
# Import images.
|
104
|
+
# Docker API: POST /images/load
|
105
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/ImageLoad
|
106
|
+
#
|
107
|
+
# @param name [String]: The ID or name of the image.
|
108
|
+
# @param params [Hash]: Parameters that are appended to the URL.
|
109
|
+
def import path, params = {}
|
110
|
+
default_reader(path, build_path("/images/load", params))
|
111
|
+
end
|
112
|
+
|
113
|
+
##
|
114
|
+
# Push an image to a registry.
|
115
|
+
# Docker API: POST /images/{name}/push
|
116
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/ImagePush
|
117
|
+
#
|
118
|
+
# @param name [String]: The ID or name of the image.
|
119
|
+
# @param params [Hash]: Parameters that are appended to the URL.
|
120
|
+
# @param authentication [Hash]: Authentication parameters.
|
121
|
+
def push name, params = {}, authentication = {}
|
122
|
+
raise Docker::API::Error.new("Provide authentication parameters to push an image") unless authentication.keys.size > 0
|
123
|
+
@connection.request(method: :post, path: build_path("/images/#{name}/push", params), headers: { "X-Registry-Auth" => Base64.urlsafe_encode64(authentication.to_json.to_s).chomp } )
|
124
|
+
end
|
149
125
|
|
126
|
+
##
|
127
|
+
# Create a new image from a container.
|
128
|
+
# Docker API: POST /commit
|
129
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/ImageCommit
|
130
|
+
#
|
131
|
+
# @param params [Hash]: Parameters that are appended to the URL.
|
132
|
+
# @param body [Hash]: Request body to be sent as json.
|
133
|
+
def commit params = {}, body = {}
|
134
|
+
container = Docker::API::Container.new.details(params[:container])
|
135
|
+
return container if [404, 301].include? container.status
|
136
|
+
@connection.request(method: :post, path: build_path("/commit", params), headers: {"Content-Type": "application/json"}, body: container.json["Config"].merge(body).to_json)
|
137
|
+
end
|
138
|
+
|
139
|
+
##
|
140
|
+
# Create an image by either pulling it from a registry or importing it.
|
141
|
+
# Docker API: POST /images/create
|
142
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/ImageCreate
|
143
|
+
#
|
144
|
+
# @param params [Hash]: Parameters that are appended to the URL.
|
145
|
+
# @param authentication [Hash]: Authentication parameters.
|
146
|
+
# @param &block: Replace the default output to stdout behavior.
|
147
|
+
def create params = {}, authentication = {}, &block
|
148
|
+
request = {method: :post, path: build_path("/images/create", params), response_block: block_given? ? block.call : default_streamer }
|
149
|
+
if params.has_key? :fromSrc and !params[:fromSrc].match(/^(http|https)/) # then it's using a tar file
|
150
|
+
path = params[:fromSrc]
|
151
|
+
params[:fromSrc] = "-"
|
152
|
+
default_reader(path, build_path("/images/create", params))
|
153
|
+
else
|
154
|
+
request[:headers] = { "X-Registry-Auth" => Base64.encode64(authentication.to_json.to_s).chomp } if authentication.keys.size > 0
|
155
|
+
@connection.request(request)
|
150
156
|
end
|
151
157
|
end
|
158
|
+
|
159
|
+
##
|
160
|
+
# Build an image from a tar archive with a Dockerfile in it.
|
161
|
+
# Docker API: POST /build
|
162
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/ImageBuild
|
163
|
+
#
|
164
|
+
# @param path [String]: Path to the tar file.
|
165
|
+
# @param params [Hash]: Parameters that are appended to the URL.
|
166
|
+
# @param authentication [Hash]: Authentication parameters.
|
167
|
+
# @param &block: Replace the default output to stdout behavior.
|
168
|
+
def build path, params = {}, authentication = {}, &block
|
169
|
+
raise Docker::API::Error.new("Expected path or params[:remote]") unless path || params[:remote]
|
170
|
+
|
171
|
+
headers = {"Content-type": "application/x-tar"}
|
172
|
+
headers.merge!({"X-Registry-Config": Base64.urlsafe_encode64(authentication.to_json.to_s).chomp}) if authentication.keys.size > 0
|
173
|
+
|
174
|
+
if path == nil and params.has_key? :remote
|
175
|
+
response = @connection.request(method: :post, path: build_path("/build", params), headers: headers, response_block: block_given? ? block.call : default_streamer)
|
176
|
+
else
|
177
|
+
default_reader(path, build_path("/build", params), headers)
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
##
|
182
|
+
# Delete builder cache.
|
183
|
+
# Docker API: POST /build/prune
|
184
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/BuildPrune
|
185
|
+
#
|
186
|
+
# @param params [Hash]: Parameters that are appended to the URL.
|
187
|
+
def delete_cache params = {}
|
188
|
+
@connection.post(build_path("/build/prune", params))
|
189
|
+
end
|
152
190
|
end
|
data/lib/docker/api/network.rb
CHANGED
@@ -3,17 +3,14 @@ module Docker
|
|
3
3
|
class Network < Docker::API::Base
|
4
4
|
|
5
5
|
def list params = {}
|
6
|
-
validate Docker::API::InvalidParameter, [:filters], params
|
7
6
|
@connection.get(build_path("/networks", params))
|
8
7
|
end
|
9
8
|
|
10
9
|
def details name, params = {}
|
11
|
-
validate Docker::API::InvalidParameter, [:verbose, :scope], params
|
12
10
|
@connection.get(build_path([name], params))
|
13
11
|
end
|
14
12
|
|
15
13
|
def create body = {}
|
16
|
-
validate Docker::API::InvalidRequestBody, [:Name, :CheckDuplicate, :Driver, :Internal, :Attachable, :Ingress, :IPAM, :EnableIPv6, :Options, :Labels], body
|
17
14
|
@connection.request(method: :post, path: build_path(["create"]), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
18
15
|
end
|
19
16
|
|
@@ -22,17 +19,14 @@ module Docker
|
|
22
19
|
end
|
23
20
|
|
24
21
|
def prune params = {}
|
25
|
-
validate Docker::API::InvalidParameter, [:filters], params
|
26
22
|
@connection.post(build_path(["prune"], params))
|
27
23
|
end
|
28
24
|
|
29
25
|
def connect name, body = {}
|
30
|
-
validate Docker::API::InvalidRequestBody, [:Container, :EndpointConfig], body
|
31
26
|
@connection.request(method: :post, path: build_path([name, "connect"]), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
32
27
|
end
|
33
28
|
|
34
29
|
def disconnect name, body = {}
|
35
|
-
validate Docker::API::InvalidRequestBody, [:Container, :Force], body
|
36
30
|
@connection.request(method: :post, path: build_path([name, "disconnect"]), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
37
31
|
end
|
38
32
|
|
data/lib/docker/api/node.rb
CHANGED
@@ -3,18 +3,14 @@ module Docker
|
|
3
3
|
class Node < Docker::API::Base
|
4
4
|
|
5
5
|
def list params = {}
|
6
|
-
validate Docker::API::InvalidParameter, [:filters], params
|
7
6
|
@connection.get(build_path("/nodes", params))
|
8
7
|
end
|
9
8
|
|
10
9
|
def update name, params = {}, body = {}
|
11
|
-
validate Docker::API::InvalidParameter, [:version], params
|
12
|
-
validate Docker::API::InvalidRequestBody, [:Name, :Labels, :Role, :Availability], body
|
13
10
|
@connection.request(method: :post, path: build_path("nodes/#{name}/update", params), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
14
11
|
end
|
15
12
|
|
16
13
|
def delete name, params = {}
|
17
|
-
validate Docker::API::InvalidParameter, [:force], params
|
18
14
|
@connection.delete(build_path("/nodes/#{name}", params))
|
19
15
|
end
|
20
16
|
|
data/lib/docker/api/plugin.rb
CHANGED
@@ -11,7 +11,6 @@ class Docker::API::Plugin < Docker::API::Base
|
|
11
11
|
#
|
12
12
|
# @param params [Hash]: Parameters that are appended to the URL.
|
13
13
|
def list params = {}
|
14
|
-
validate Docker::API::InvalidParameter, [:filters], params
|
15
14
|
@connection.get(build_path("/plugins", params))
|
16
15
|
end
|
17
16
|
|
@@ -23,7 +22,6 @@ class Docker::API::Plugin < Docker::API::Base
|
|
23
22
|
#
|
24
23
|
# @param params [Hash]: Parameters that are appended to the URL.
|
25
24
|
def privileges params = {}
|
26
|
-
validate Docker::API::InvalidParameter, [:remote], params
|
27
25
|
@connection.get(build_path("/plugins/privileges", params))
|
28
26
|
end
|
29
27
|
|
@@ -41,7 +39,6 @@ class Docker::API::Plugin < Docker::API::Base
|
|
41
39
|
#
|
42
40
|
# @param authentication [Hash]: Authentication parameters.
|
43
41
|
def install params = {}, privileges = [], authentication = {}
|
44
|
-
validate Docker::API::InvalidParameter, [:remote, :name], params
|
45
42
|
headers = {"Content-Type": "application/json"}
|
46
43
|
headers.merge!({"X-Registry-Auth" => Base64.urlsafe_encode64(authentication.to_json.to_s)}) if authentication.keys.size > 0
|
47
44
|
@connection.request(method: :post, path: build_path("/plugins/pull", params), headers: headers, body: privileges.to_json )
|
@@ -68,7 +65,6 @@ class Docker::API::Plugin < Docker::API::Base
|
|
68
65
|
#
|
69
66
|
# @param params [Hash]: Parameters that are appended to the URL.
|
70
67
|
def remove name, params = {}
|
71
|
-
validate Docker::API::InvalidParameter, [:force], params
|
72
68
|
@connection.delete(build_path("/plugins/#{name}",params))
|
73
69
|
end
|
74
70
|
|
@@ -82,7 +78,6 @@ class Docker::API::Plugin < Docker::API::Base
|
|
82
78
|
#
|
83
79
|
# @param params [Hash]: Parameters that are appended to the URL.
|
84
80
|
def enable name, params = {}
|
85
|
-
validate Docker::API::InvalidParameter, [:timeout], params
|
86
81
|
@connection.post(build_path("/plugins/#{name}/enable", params))
|
87
82
|
end
|
88
83
|
|
@@ -111,7 +106,6 @@ class Docker::API::Plugin < Docker::API::Base
|
|
111
106
|
#
|
112
107
|
# @param authentication [Hash]: Authentication parameters.
|
113
108
|
def upgrade name, params = {}, privileges = [], authentication = {}
|
114
|
-
validate Docker::API::InvalidParameter, [:remote], params
|
115
109
|
headers = {"Content-Type": "application/json"}
|
116
110
|
headers.merge!({"X-Registry-Auth" => Base64.urlsafe_encode64(authentication.to_json.to_s)}) if authentication.keys.size > 0
|
117
111
|
@connection.request(method: :post, path: build_path("/plugins/#{name}/upgrade", params), headers: headers, body: privileges.to_json )
|
data/lib/docker/api/secret.rb
CHANGED
@@ -13,7 +13,6 @@ class Docker::API::Secret < Docker::API::Base
|
|
13
13
|
#
|
14
14
|
# @param params [Hash]: Parameters that are appended to the URL.
|
15
15
|
def list params = {}
|
16
|
-
validate Docker::API::InvalidParameter, [:filters], params
|
17
16
|
@connection.get(build_path("/secrets",params))
|
18
17
|
end
|
19
18
|
|
@@ -25,7 +24,6 @@ class Docker::API::Secret < Docker::API::Base
|
|
25
24
|
#
|
26
25
|
# @param body [Hash]: Request body to be sent as json.
|
27
26
|
def create body = {}
|
28
|
-
validate Docker::API::InvalidRequestBody, [:Name, :Labels, :Data, :Driver, :Templating], body
|
29
27
|
@connection.request(method: :post, path: "/secrets/create", headers: {"Content-Type": "application/json"}, body: body.to_json)
|
30
28
|
end
|
31
29
|
|
@@ -52,8 +50,6 @@ class Docker::API::Secret < Docker::API::Base
|
|
52
50
|
#
|
53
51
|
# @param body [Hash]: Request body to be sent as json.
|
54
52
|
def update name, params = {}, body = {}
|
55
|
-
validate Docker::API::InvalidParameter, [:version], params
|
56
|
-
validate Docker::API::InvalidRequestBody, [:Name, :Labels, :Data, :Driver, :Templating], body
|
57
53
|
@connection.request(method: :post, path: build_path("/secrets/#{name}/update",params), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
58
54
|
end
|
59
55
|
|
data/lib/docker/api/service.rb
CHANGED
@@ -13,7 +13,6 @@ class Docker::API::Service < Docker::API::Base
|
|
13
13
|
#
|
14
14
|
# @param params [Hash]: Parameters that are appended to the URL.
|
15
15
|
def list params = {}
|
16
|
-
validate Docker::API::InvalidParameter, [:filters], params
|
17
16
|
@connection.get(build_path("/services", params))
|
18
17
|
end
|
19
18
|
|
@@ -27,7 +26,6 @@ class Docker::API::Service < Docker::API::Base
|
|
27
26
|
#
|
28
27
|
# @param authentication [Hash]: Authentication parameters.
|
29
28
|
def create body = {}, authentication = {}
|
30
|
-
validate Docker::API::InvalidRequestBody, [:Name, :Labels, :TaskTemplate, :Mode, :UpdateConfig, :RollbackConfig, :Networks, :EndpointSpec], body
|
31
29
|
headers = {"Content-Type": "application/json"}
|
32
30
|
headers.merge!({"X-Registry-Auth" => Base64.urlsafe_encode64(authentication.to_json.to_s)}) if authentication.keys.size > 0
|
33
31
|
@connection.request(method: :post, path: "/services/create", headers: headers, body: body.to_json)
|
@@ -48,8 +46,6 @@ class Docker::API::Service < Docker::API::Base
|
|
48
46
|
# @param authentication [Hash]: Authentication parameters.
|
49
47
|
def update name, params = {}, body = {}, authentication = {}
|
50
48
|
# view https://github.com/docker/swarmkit/issues/1394#issuecomment-240850719
|
51
|
-
validate Docker::API::InvalidParameter, [:version, :registryAuthFrom, :rollback], params
|
52
|
-
validate Docker::API::InvalidRequestBody, [:Name, :Labels, :TaskTemplate, :Mode, :UpdateConfig, :RollbackConfig, :Networks, :EndpointSpec], body
|
53
49
|
headers = {"Content-Type": "application/json"}
|
54
50
|
headers.merge!({"X-Registry-Auth" => Base64.urlsafe_encode64(authentication.to_json.to_s)}) if authentication.keys.size > 0
|
55
51
|
@connection.request(method: :post, path: build_path("/services/#{name}/update", params), headers: headers, body: body.to_json)
|
@@ -65,7 +61,6 @@ class Docker::API::Service < Docker::API::Base
|
|
65
61
|
#
|
66
62
|
# @param params [Hash]: Parameters that are appended to the URL.
|
67
63
|
def details name, params = {}
|
68
|
-
validate Docker::API::InvalidParameter, [:insertDefaults], params
|
69
64
|
@connection.get(build_path("/services/#{name}", params))
|
70
65
|
end
|
71
66
|
|
@@ -81,7 +76,6 @@ class Docker::API::Service < Docker::API::Base
|
|
81
76
|
#
|
82
77
|
# @param params [Hash]: Parameters that are appended to the URL.
|
83
78
|
def logs name, params = {}
|
84
|
-
validate Docker::API::InvalidParameter, [:details, :follow, :stdout, :stderr, :since, :timestamps, :tail], params
|
85
79
|
@connection.get(build_path("/services/#{name}/logs", params))
|
86
80
|
end
|
87
81
|
|
data/lib/docker/api/swarm.rb
CHANGED
@@ -3,13 +3,10 @@ module Docker
|
|
3
3
|
class Swarm < Docker::API::Base
|
4
4
|
|
5
5
|
def init body = {}
|
6
|
-
validate Docker::API::InvalidRequestBody, [:ListenAddr, :AdvertiseAddr, :DataPathAddr, :DataPathPort, :DefaultAddrPool, :ForceNewCluster, :SubnetSize, :Spec], body
|
7
6
|
@connection.request(method: :post, path: build_path("/swarm/init"), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
8
7
|
end
|
9
8
|
|
10
9
|
def update params = {}, body = {}
|
11
|
-
validate Docker::API::InvalidParameter, [:version, :rotateWorkerToken, :rotateManagerToken, :rotateManagerUnlockKey], params
|
12
|
-
validate Docker::API::InvalidRequestBody, [:Name, :Labels, :Orchestration, :Raft, :Dispatcher, :CAConfig, :EncryptionConfig, :TaskDefaults], body
|
13
10
|
@connection.request(method: :post, path: build_path("/swarm/update", params), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
14
11
|
end
|
15
12
|
|
@@ -22,17 +19,14 @@ module Docker
|
|
22
19
|
end
|
23
20
|
|
24
21
|
def unlock body = {}
|
25
|
-
validate Docker::API::InvalidRequestBody, [:UnlockKey], body
|
26
22
|
@connection.request(method: :post, path: build_path("/swarm/unlock"), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
27
23
|
end
|
28
24
|
|
29
25
|
def join body = {}
|
30
|
-
validate Docker::API::InvalidRequestBody, [:ListenAddr, :AdvertiseAddr, :DataPathAddr, :RemoteAddrs, :JoinToken], body
|
31
26
|
@connection.request(method: :post, path: build_path("/swarm/join"), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
32
27
|
end
|
33
28
|
|
34
29
|
def leave params = {}
|
35
|
-
validate Docker::API::InvalidParameter, [:force], params
|
36
30
|
@connection.post(build_path("/swarm/leave", params))
|
37
31
|
end
|
38
32
|
|
data/lib/docker/api/system.rb
CHANGED
@@ -4,12 +4,10 @@ module Docker
|
|
4
4
|
class System < Docker::API::Base
|
5
5
|
|
6
6
|
def auth body = {}
|
7
|
-
validate Docker::API::InvalidRequestBody, [:username, :password, :email, :serveraddress, :identitytoken], body
|
8
7
|
@connection.request(method: :post, path: "/auth", headers: { "Content-Type" => "application/json" }, body: body.to_json)
|
9
8
|
end
|
10
9
|
|
11
10
|
def events params = {}
|
12
|
-
validate Docker::API::InvalidParameter, [:since, :until, :filters], params
|
13
11
|
@connection.request(method: :get, path: build_path("/events", params), response_block: lambda { |chunk, remaining_bytes, total_bytes| puts chunk.inspect } )
|
14
12
|
end
|
15
13
|
|
data/lib/docker/api/task.rb
CHANGED
@@ -13,7 +13,6 @@ class Docker::API::Task < Docker::API::Base
|
|
13
13
|
#
|
14
14
|
# @param params [Hash]: Parameters that are appended to the URL.
|
15
15
|
def list params = {}
|
16
|
-
validate Docker::API::InvalidParameter, [:filters], params
|
17
16
|
@connection.get(build_path("/tasks",params))
|
18
17
|
end
|
19
18
|
|
@@ -40,7 +39,6 @@ class Docker::API::Task < Docker::API::Base
|
|
40
39
|
#
|
41
40
|
# @param params (Hash) : Parameters that are appended to the URL.
|
42
41
|
def logs name, params = {}
|
43
|
-
validate Docker::API::InvalidParameter, [:details, :follow, :stdout, :stderr, :since, :timestamps, :tail], params
|
44
42
|
@connection.get(build_path("/tasks/#{name}/logs", params))
|
45
43
|
end
|
46
44
|
end
|
data/lib/docker/api/version.rb
CHANGED
data/lib/docker/api/volume.rb
CHANGED
@@ -3,7 +3,6 @@ module Docker
|
|
3
3
|
class Volume < Docker::API::Base
|
4
4
|
|
5
5
|
def list params = {}
|
6
|
-
validate Docker::API::InvalidParameter, [:filters], params
|
7
6
|
@connection.get(build_path("/volumes", params))
|
8
7
|
end
|
9
8
|
|
@@ -12,17 +11,14 @@ module Docker
|
|
12
11
|
end
|
13
12
|
|
14
13
|
def create body = {}
|
15
|
-
validate Docker::API::InvalidRequestBody, [:Name, :Driver, :DriverOpts, :Labels], body
|
16
14
|
@connection.request(method: :post, path: build_path(["create"]), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
17
15
|
end
|
18
16
|
|
19
17
|
def remove name, params = {}
|
20
|
-
validate Docker::API::InvalidParameter, [:force], params
|
21
18
|
@connection.delete(build_path([name]))
|
22
19
|
end
|
23
20
|
|
24
21
|
def prune params = {}
|
25
|
-
validate Docker::API::InvalidParameter, [:filters], params
|
26
22
|
@connection.post(build_path(["prune"], params))
|
27
23
|
end
|
28
24
|
|
data/lib/dockerapi.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require "excon"
|
2
2
|
require "json"
|
3
|
+
require "base64"
|
4
|
+
require "fileutils"
|
3
5
|
|
4
6
|
require "docker/api/version"
|
5
7
|
require "docker/api/error"
|
@@ -22,6 +24,140 @@ require "docker/api/plugin"
|
|
22
24
|
|
23
25
|
module Docker
|
24
26
|
module API
|
27
|
+
|
28
|
+
PRINT_TO_STDOUT = true
|
29
|
+
|
30
|
+
VALID_PARAMS = {
|
31
|
+
"Docker::API::Image" => {
|
32
|
+
"build" => [:dockerfile, :t, :extrahosts, :remote, :q, :nocache, :cachefrom, :pull, :rm, :forcerm, :memory, :memswap, :cpushares, :cpusetcpus, :cpuperiod, :cpuquota, :buildargs, :shmsize, :squash, :labels, :networkmode, :platform, :target, :outputs],
|
33
|
+
"prune" => [:filters],
|
34
|
+
"list" => [:all, :filters, :digests],
|
35
|
+
"search" => [:term, :limit, :filters],
|
36
|
+
"tag" => [:repo, :tag],
|
37
|
+
"remove" => [:force, :noprune],
|
38
|
+
"import" => [:quiet],
|
39
|
+
"push" => [:tag],
|
40
|
+
"commit" => [:container, :repo, :tag, :comment, :author, :pause, :changes],
|
41
|
+
"create" => [:fromImage, :fromSrc, :repo, :tag, :message, :platform],
|
42
|
+
"delete_cache" => [:all, "keep-storage", :filters]
|
43
|
+
},
|
44
|
+
"Docker::API::Container" => {
|
45
|
+
"list" => [:all, :limit, :size, :filters],
|
46
|
+
"details" => [:size],
|
47
|
+
"top" => [:ps_args],
|
48
|
+
"start" => [:detachKeys],
|
49
|
+
"stop" => [:t],
|
50
|
+
"restart" => [:t],
|
51
|
+
"kill" => [:signal],
|
52
|
+
"wait" => [:condition],
|
53
|
+
"rename" => [:name],
|
54
|
+
"resize" => [:w, :h],
|
55
|
+
"prune" => [:filters],
|
56
|
+
"remove" => [:v, :force, :link],
|
57
|
+
"logs" => [:follow, :stdout, :stderr, :since, :until, :timestamps, :tail],
|
58
|
+
"attach" => [:detachKeys, :logs, :stream, :stdin, :stdout, :stderr],
|
59
|
+
"stats" => [:stream],
|
60
|
+
"archive" => [:path, :noOverwriteDirNonDir, :copyUIDGID],
|
61
|
+
"create" => [:name]
|
62
|
+
},
|
63
|
+
"Docker::API::Volume" => {
|
64
|
+
"list" => [:filters],
|
65
|
+
"remove" => [:force],
|
66
|
+
"prune" => [:filters]
|
67
|
+
},
|
68
|
+
"Docker::API::Network" => {
|
69
|
+
"list" => [:filters],
|
70
|
+
"details" => [:verbose, :scope],
|
71
|
+
"prune" => [:filters]
|
72
|
+
},
|
73
|
+
"Docker::API::System" => {
|
74
|
+
"events" => [:since, :until, :filters]
|
75
|
+
},
|
76
|
+
"Docker::API::Exec" => {
|
77
|
+
"resize" => [:w, :h]
|
78
|
+
},
|
79
|
+
"Docker::API::Swarm" => {
|
80
|
+
"leave" => [:force],
|
81
|
+
"update" => [:version, :rotateWorkerToken, :rotateManagerToken, :rotateManagerUnlockKey]
|
82
|
+
},
|
83
|
+
"Docker::API::Node" => {
|
84
|
+
"list" => [:filters],
|
85
|
+
"update" => [:version],
|
86
|
+
"delete" => [:force]
|
87
|
+
},
|
88
|
+
"Docker::API::Service" => {
|
89
|
+
"list" => [:filters],
|
90
|
+
"update" => [:version, :registryAuthFrom, :rollback],
|
91
|
+
"details" => [:insertDefaults],
|
92
|
+
"logs" => [:details, :follow, :stdout, :stderr, :since, :timestamps, :tail]
|
93
|
+
},
|
94
|
+
"Docker::API::Secret" => {
|
95
|
+
"list" => [:filters],
|
96
|
+
"update" => [:version]
|
97
|
+
},
|
98
|
+
"Docker::API::Task" => {
|
99
|
+
"list" => [:filters],
|
100
|
+
"logs" => [:details, :follow, :stdout, :stderr, :since, :timestamps, :tail]
|
101
|
+
},
|
102
|
+
"Docker::API::Plugin" => {
|
103
|
+
"list" => [:filters],
|
104
|
+
"privileges" => [:remote],
|
105
|
+
"install" => [:remote, :name],
|
106
|
+
"remove" => [:force],
|
107
|
+
"enable" => [:timeout],
|
108
|
+
"upgrade" => [:remote]
|
109
|
+
},
|
110
|
+
"Docker::API::Config" => {
|
111
|
+
"list" => [:filters],
|
112
|
+
"update" => [:version]
|
113
|
+
}
|
114
|
+
}
|
115
|
+
|
116
|
+
VALID_BODY = {
|
117
|
+
"Docker::API::Image" => {
|
118
|
+
"commit" => [:Hostname, :Domainname, :User, :AttachStdin, :AttachStdout, :AttachStderr, :ExposedPorts, :Tty, :OpenStdin, :StdinOnce, :Env, :Cmd, :HealthCheck, :ArgsEscaped, :Image, :Volumes, :WorkingDir, :Entrypoint, :NetworkDisabled, :MacAddress, :OnBuild, :Labels, :StopSignal, :StopTimeout, :Shell]
|
119
|
+
},
|
120
|
+
"Docker::API::Container" => {
|
121
|
+
"create" => [:Hostname,:Domainname,:User,:AttachStdin,:AttachStdout,:AttachStderr,:ExposedPorts,:Tty,:OpenStdin,:StdinOnce,:Env,:Cmd,:HealthCheck,:ArgsEscaped,:Image,:Volumes,:WorkingDir,:Entrypoint,:NetworkDisabled,:MacAddress,:OnBuild,:Labels,:StopSignal,:StopTimeout,:Shell,:HostConfig,:NetworkingConfig],
|
122
|
+
"update" => [:CpuShares, :Memory, :CgroupParent, :BlkioWeight, :BlkioWeightDevice, :BlkioWeightReadBps, :BlkioWeightWriteBps, :BlkioWeightReadOps, :BlkioWeightWriteOps, :CpuPeriod, :CpuQuota, :CpuRealtimePeriod, :CpuRealtimeRuntime, :CpusetCpus, :CpusetMems, :Devices, :DeviceCgroupRules, :DeviceRequest, :Kernel, :Memory, :KernelMemoryTCP, :MemoryReservation, :MemorySwap, :MemorySwappiness, :NanoCPUs, :OomKillDisable, :Init, :PidsLimit, :ULimits, :CpuCount, :CpuPercent, :IOMaximumIOps, :IOMaximumBandwidth, :RestartPolicy]
|
123
|
+
},
|
124
|
+
"Docker::API::Volume" => {
|
125
|
+
"create" => [:Name, :Driver, :DriverOpts, :Labels]
|
126
|
+
},
|
127
|
+
"Docker::API::Network" => {
|
128
|
+
"create" => [:Name, :CheckDuplicate, :Driver, :Internal, :Attachable, :Ingress, :IPAM, :EnableIPv6, :Options, :Labels],
|
129
|
+
"connect" => [:Container, :EndpointConfig],
|
130
|
+
"disconnect" => [:Container, :Force]
|
131
|
+
},
|
132
|
+
"Docker::API::System" => {
|
133
|
+
"auth" => [:username, :password, :email, :serveraddress, :identitytoken]
|
134
|
+
},
|
135
|
+
"Docker::API::Exec" => {
|
136
|
+
"create" => [:AttachStdin, :AttachStdout, :AttachStderr, :DetachKeys, :Tty, :Env, :Cmd, :Privileged, :User, :WorkingDir],
|
137
|
+
"start" => [:Detach, :Tty]
|
138
|
+
},
|
139
|
+
"Docker::API::Swarm" => {
|
140
|
+
"init" => [:ListenAddr, :AdvertiseAddr, :DataPathAddr, :DataPathPort, :DefaultAddrPool, :ForceNewCluster, :SubnetSize, :Spec],
|
141
|
+
"update" => [:Name, :Labels, :Orchestration, :Raft, :Dispatcher, :CAConfig, :EncryptionConfig, :TaskDefaults],
|
142
|
+
"unlock" => [:UnlockKey],
|
143
|
+
"join" => [:ListenAddr, :AdvertiseAddr, :DataPathAddr, :RemoteAddrs, :JoinToken]
|
144
|
+
},
|
145
|
+
"Docker::API::Node" => {
|
146
|
+
"update" => [:Name, :Labels, :Role, :Availability]
|
147
|
+
},
|
148
|
+
"Docker::API::Service" => {
|
149
|
+
"create" => [:Name, :Labels, :TaskTemplate, :Mode, :UpdateConfig, :RollbackConfig, :Networks, :EndpointSpec],
|
150
|
+
"update" => [:Name, :Labels, :TaskTemplate, :Mode, :UpdateConfig, :RollbackConfig, :Networks, :EndpointSpec]
|
151
|
+
},
|
152
|
+
"Docker::API::Secret" => {
|
153
|
+
"create" => [:Name, :Labels, :Data, :Driver, :Templating],
|
154
|
+
"update" => [:Name, :Labels, :Data, :Driver, :Templating]
|
155
|
+
},
|
156
|
+
"Docker::API::Config" => {
|
157
|
+
"create" => [:Name, :Labels, :Data, :Templating],
|
158
|
+
"update" => [:Name, :Labels, :Data, :Driver, :Templating]
|
159
|
+
}
|
160
|
+
}
|
25
161
|
|
26
162
|
end
|
27
163
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dockerapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alysson A. Costa
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: excon
|