dockerapi 0.12.0 → 0.17.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/CHANGELOG.md +40 -0
- data/Gemfile.lock +3 -3
- data/README.md +69 -24
- data/dockerapi.gemspec +4 -3
- data/lib/docker/api/base.rb +101 -29
- data/lib/docker/api/config.rb +0 -4
- data/lib/docker/api/connection.rb +23 -17
- data/lib/docker/api/container.rb +306 -166
- data/lib/docker/api/error.rb +19 -3
- data/lib/docker/api/exec.rb +49 -40
- data/lib/docker/api/image.rb +201 -148
- data/lib/docker/api/network.rb +84 -54
- data/lib/docker/api/node.rb +47 -32
- data/lib/docker/api/plugin.rb +0 -6
- data/lib/docker/api/response.rb +27 -19
- data/lib/docker/api/secret.rb +1 -13
- data/lib/docker/api/service.rb +3 -24
- data/lib/docker/api/swarm.rb +70 -42
- data/lib/docker/api/system.rb +57 -26
- data/lib/docker/api/task.rb +10 -12
- data/lib/docker/api/version.rb +1 -1
- data/lib/docker/api/volume.rb +56 -41
- data/lib/dockerapi.rb +143 -0
- metadata +10 -7
data/lib/docker/api/network.rb
CHANGED
@@ -1,56 +1,86 @@
|
|
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
|
-
name, params = args[0], args[1] || {}
|
50
|
-
details(name, params)
|
51
|
-
end
|
52
|
-
#################################################
|
53
|
-
|
54
|
-
end
|
1
|
+
##
|
2
|
+
# This class represents the Docker API endpoints regarding networks.
|
3
|
+
# @see https://docs.docker.com/engine/api/v1.40/#tag/Network
|
4
|
+
class Docker::API::Network < Docker::API::Base
|
5
|
+
|
6
|
+
##
|
7
|
+
# List networks.
|
8
|
+
#
|
9
|
+
# Docker API: GET /networks
|
10
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkList
|
11
|
+
#
|
12
|
+
# @param params [Hash]: Parameters that are appended to the URL.
|
13
|
+
def list params = {}
|
14
|
+
@connection.get(build_path("/networks", params))
|
15
|
+
end
|
16
|
+
|
17
|
+
##
|
18
|
+
# Inspect a network.
|
19
|
+
#
|
20
|
+
# Docker API: GET /networks/{id}
|
21
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkInspect
|
22
|
+
#
|
23
|
+
# @param name [String]: The ID or name of the network.
|
24
|
+
# @param params [Hash]: Parameters that are appended to the URL.
|
25
|
+
def details name, params = {}
|
26
|
+
@connection.get(build_path("/networks/#{name}", params))
|
27
|
+
end
|
28
|
+
|
29
|
+
##
|
30
|
+
# Create a network.
|
31
|
+
#
|
32
|
+
# Docker API: POST /networks/create
|
33
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkCreate
|
34
|
+
#
|
35
|
+
# @param body [Hash]: Request body to be sent as json.
|
36
|
+
def create body = {}
|
37
|
+
@connection.request(method: :post, path: "/networks/create", headers: {"Content-Type": "application/json"}, body: body.to_json)
|
38
|
+
end
|
39
|
+
|
40
|
+
##
|
41
|
+
# Remove a network.
|
42
|
+
#
|
43
|
+
# Docker API: DELETE /networks/{id}
|
44
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkDelete
|
45
|
+
#
|
46
|
+
# @param name [String]: The ID or name of the network.
|
47
|
+
def remove name
|
48
|
+
@connection.delete("/networks/#{name}")
|
55
49
|
end
|
50
|
+
|
51
|
+
##
|
52
|
+
# Delete unused networks.
|
53
|
+
#
|
54
|
+
# Docker API: POST /networks/prune
|
55
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkPrune
|
56
|
+
#
|
57
|
+
# @param params [Hash]: Parameters that are appended to the URL.
|
58
|
+
def prune params = {}
|
59
|
+
@connection.post(build_path("/networks/prune", params))
|
60
|
+
end
|
61
|
+
|
62
|
+
##
|
63
|
+
# Connect a container to a network.
|
64
|
+
#
|
65
|
+
# Docker API: POST /networks/{id}/connect
|
66
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkConnect
|
67
|
+
#
|
68
|
+
# @param name [String]: The ID or name of the network.
|
69
|
+
# @param body [Hash]: Request body to be sent as json.
|
70
|
+
def connect name, body = {}
|
71
|
+
@connection.request(method: :post, path: "/networks/#{name}/connect", headers: {"Content-Type": "application/json"}, body: body.to_json)
|
72
|
+
end
|
73
|
+
|
74
|
+
##
|
75
|
+
# Disconnect a container from a network.
|
76
|
+
#
|
77
|
+
# Docker API: POST /networks/{id}/disconnect
|
78
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkDisconnect
|
79
|
+
#
|
80
|
+
# @param name [String]: The ID or name of the network.
|
81
|
+
# @param body [Hash]: Request body to be sent as json.
|
82
|
+
def disconnect name, body = {}
|
83
|
+
@connection.request(method: :post, path: "/networks/#{name}/disconnect", headers: {"Content-Type": "application/json"}, body: body.to_json)
|
84
|
+
end
|
85
|
+
|
56
86
|
end
|
data/lib/docker/api/node.rb
CHANGED
@@ -1,38 +1,53 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
# This class represents the Docker API endpoints regarding nodes.
|
2
|
+
#
|
3
|
+
# Nodes are instances of the Engine participating in a swarm. Swarm mode must be enabled for these endpoints to work.
|
4
|
+
# @see https://docs.docker.com/engine/api/v1.40/#tag/Node
|
5
|
+
class Docker::API::Node < Docker::API::Base
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
def delete name, params = {}
|
17
|
-
validate Docker::API::InvalidParameter, [:force], params
|
18
|
-
@connection.delete(build_path("/nodes/#{name}", params))
|
19
|
-
end
|
7
|
+
##
|
8
|
+
# List nodes.
|
9
|
+
#
|
10
|
+
# Docker API: GET /nodes
|
11
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/NodeList
|
12
|
+
#
|
13
|
+
# @param params [Hash]: Parameters that are appended to the URL.
|
14
|
+
def list params = {}
|
15
|
+
@connection.get(build_path("/nodes", params))
|
16
|
+
end
|
20
17
|
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
##
|
19
|
+
# Update a node.
|
20
|
+
#
|
21
|
+
# Docker API: POST /nodes/{id}/update
|
22
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/NodeUpdate
|
23
|
+
#
|
24
|
+
# @param name [String]: The ID or name of the node.
|
25
|
+
# @param params [Hash]: Parameters that are appended to the URL.
|
26
|
+
# @param body [Hash]: Request body to be sent as json.
|
27
|
+
def update name, params = {}, body = {}
|
28
|
+
@connection.request(method: :post, path: build_path("nodes/#{name}/update", params), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
29
|
+
end
|
24
30
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
31
|
+
##
|
32
|
+
# Delete a node.
|
33
|
+
#
|
34
|
+
# Docker API: DELETE /nodes/{id}
|
35
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/NodeDelete
|
36
|
+
#
|
37
|
+
# @param name [String]: The ID or name of the node.
|
38
|
+
# @param params [Hash]: Parameters that are appended to the URL.
|
39
|
+
def delete name, params = {}
|
40
|
+
@connection.delete(build_path("/nodes/#{name}", params))
|
41
|
+
end
|
35
42
|
|
36
|
-
|
43
|
+
##
|
44
|
+
# Inspect a node.
|
45
|
+
#
|
46
|
+
# Docker API: GET /nodes/{id}
|
47
|
+
# @see https://docs.docker.com/engine/api/v1.40/#operation/NodeInspect
|
48
|
+
#
|
49
|
+
# @param name [String]: The ID or name of the node.
|
50
|
+
def details name
|
51
|
+
@connection.get("/nodes/#{name}")
|
37
52
|
end
|
38
53
|
end
|
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/response.rb
CHANGED
@@ -1,25 +1,33 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
##
|
2
|
+
# Reponse class.
|
3
|
+
class Docker::API::Response < Excon::Response
|
4
|
+
attr_reader(:json, :path)
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
##
|
7
|
+
# Initialize a new Response object.
|
8
|
+
#
|
9
|
+
# @params data [Object]: Reponse's data.
|
10
|
+
def initialize data
|
11
|
+
super data
|
12
|
+
@json = parse_json @body
|
13
|
+
@path = @data[:path]
|
14
|
+
end
|
11
15
|
|
12
|
-
|
13
|
-
|
14
|
-
|
16
|
+
##
|
17
|
+
# Returns true if Response status is in 200..204 range.
|
18
|
+
def success?
|
19
|
+
(200..204).include? @status
|
20
|
+
end
|
15
21
|
|
16
|
-
|
22
|
+
private
|
17
23
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
+
##
|
25
|
+
# Creates a json from Response data attribute.
|
26
|
+
#
|
27
|
+
# @params data [String]: String to be converted in json.
|
28
|
+
def parse_json data
|
29
|
+
return nil unless headers["Content-Type"] == "application/json"
|
30
|
+
return nil if data == ""
|
31
|
+
data.split("\r\n").size > 1 ? data.split("\r\n").map{ |e| eval(e) } : JSON.parse(data)
|
24
32
|
end
|
25
33
|
end
|
data/lib/docker/api/secret.rb
CHANGED
@@ -1,38 +1,32 @@
|
|
1
1
|
# This class represents the Docker API endpoints regarding secrets.
|
2
2
|
#
|
3
|
-
# @see https://docs.docker.com/engine/api/v1.40/#tag/Secret
|
4
|
-
#
|
5
3
|
# Secrets are sensitive data that can be used by services. Swarm mode must be enabled for these endpoints to work.
|
4
|
+
# @see https://docs.docker.com/engine/api/v1.40/#tag/Secret
|
6
5
|
class Docker::API::Secret < Docker::API::Base
|
7
6
|
|
8
7
|
# List secrets
|
9
8
|
#
|
10
9
|
# Docker API: GET /secrets
|
11
|
-
#
|
12
10
|
# @see https://docs.docker.com/engine/api/v1.40/#operation/SecretList
|
13
11
|
#
|
14
12
|
# @param params [Hash]: Parameters that are appended to the URL.
|
15
13
|
def list params = {}
|
16
|
-
validate Docker::API::InvalidParameter, [:filters], params
|
17
14
|
@connection.get(build_path("/secrets",params))
|
18
15
|
end
|
19
16
|
|
20
17
|
# Create a secret
|
21
18
|
#
|
22
19
|
# Docker API: POST /secrets/create
|
23
|
-
#
|
24
20
|
# @see https://docs.docker.com/engine/api/v1.40/#operation/SecretCreate
|
25
21
|
#
|
26
22
|
# @param body [Hash]: Request body to be sent as json.
|
27
23
|
def create body = {}
|
28
|
-
validate Docker::API::InvalidRequestBody, [:Name, :Labels, :Data, :Driver, :Templating], body
|
29
24
|
@connection.request(method: :post, path: "/secrets/create", headers: {"Content-Type": "application/json"}, body: body.to_json)
|
30
25
|
end
|
31
26
|
|
32
27
|
# Inspect a secret
|
33
28
|
#
|
34
29
|
# Docker API: GET /secrets/{id}
|
35
|
-
#
|
36
30
|
# @see https://docs.docker.com/engine/api/v1.40/#operation/SecretInspect
|
37
31
|
#
|
38
32
|
# @param name [String]: The ID or name of the secret.
|
@@ -43,24 +37,18 @@ class Docker::API::Secret < Docker::API::Base
|
|
43
37
|
# Update a secret
|
44
38
|
#
|
45
39
|
# Docker API: POST /secrets/{id}/update
|
46
|
-
#
|
47
40
|
# @see https://docs.docker.com/engine/api/v1.40/#operation/SecretUpdate
|
48
41
|
#
|
49
42
|
# @param name [String]: The ID or name of the secret.
|
50
|
-
#
|
51
43
|
# @param params [Hash]: Parameters that are appended to the URL.
|
52
|
-
#
|
53
44
|
# @param body [Hash]: Request body to be sent as json.
|
54
45
|
def update name, params = {}, body = {}
|
55
|
-
validate Docker::API::InvalidParameter, [:version], params
|
56
|
-
validate Docker::API::InvalidRequestBody, [:Name, :Labels, :Data, :Driver, :Templating], body
|
57
46
|
@connection.request(method: :post, path: build_path("/secrets/#{name}/update",params), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
58
47
|
end
|
59
48
|
|
60
49
|
# Delete a secret
|
61
50
|
#
|
62
51
|
# Docker API: DELETE /secrets/{id}
|
63
|
-
#
|
64
52
|
# @see https://docs.docker.com/engine/api/v1.40/#operation/SecretDelete
|
65
53
|
#
|
66
54
|
# @param name [String]: The ID or name of the secret.
|
data/lib/docker/api/service.rb
CHANGED
@@ -1,94 +1,73 @@
|
|
1
1
|
# This class represents the Docker API endpoints regarding services.
|
2
2
|
#
|
3
|
-
# @see https://docs.docker.com/engine/api/v1.40/#tag/Service
|
4
|
-
#
|
5
3
|
# Services are the definitions of tasks to run on a swarm. Swarm mode must be enabled for these endpoints to work.
|
4
|
+
# @see https://docs.docker.com/engine/api/v1.40/#tag/Service
|
6
5
|
class Docker::API::Service < Docker::API::Base
|
7
6
|
|
8
7
|
# List services
|
9
8
|
#
|
10
9
|
# Docker API: GET /services
|
11
|
-
#
|
12
10
|
# @see https://docs.docker.com/engine/api/v1.40/#operation/ServiceList
|
13
11
|
#
|
14
12
|
# @param params [Hash]: Parameters that are appended to the URL.
|
15
13
|
def list params = {}
|
16
|
-
validate Docker::API::InvalidParameter, [:filters], params
|
17
14
|
@connection.get(build_path("/services", params))
|
18
15
|
end
|
19
16
|
|
20
17
|
# Create a service
|
21
18
|
#
|
22
19
|
# Docker API: POST /services/create
|
23
|
-
#
|
24
20
|
# @see https://docs.docker.com/engine/api/v1.40/#operation/ServiceCreate
|
25
21
|
#
|
26
22
|
# @param body [Hash]: Request body to be sent as json.
|
27
|
-
#
|
28
23
|
# @param authentication [Hash]: Authentication parameters.
|
29
24
|
def create body = {}, authentication = {}
|
30
|
-
validate Docker::API::InvalidRequestBody, [:Name, :Labels, :TaskTemplate, :Mode, :UpdateConfig, :RollbackConfig, :Networks, :EndpointSpec], body
|
31
25
|
headers = {"Content-Type": "application/json"}
|
32
|
-
headers.merge!({"X-Registry-Auth" =>
|
26
|
+
headers.merge!({"X-Registry-Auth" => auth_encoder(authentication) }) if authentication.keys.size > 0
|
33
27
|
@connection.request(method: :post, path: "/services/create", headers: headers, body: body.to_json)
|
34
28
|
end
|
35
29
|
|
36
30
|
# Update a service
|
37
31
|
#
|
38
32
|
# Docker API: POST /services/{id}/update
|
39
|
-
#
|
40
33
|
# @see https://docs.docker.com/engine/api/v1.40/#operation/ServiceUpdate
|
41
34
|
#
|
42
35
|
# @param name [String]: The ID or name of the service.
|
43
|
-
#
|
44
36
|
# @param params [Hash]: Parameters that are appended to the URL.
|
45
|
-
#
|
46
37
|
# @param body [Hash]: Request body to be sent as json.
|
47
|
-
#
|
48
38
|
# @param authentication [Hash]: Authentication parameters.
|
49
39
|
def update name, params = {}, body = {}, authentication = {}
|
50
40
|
# 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
41
|
headers = {"Content-Type": "application/json"}
|
54
|
-
headers.merge!({"X-Registry-Auth" =>
|
42
|
+
headers.merge!({"X-Registry-Auth" => auth_encoder(authentication) }) if authentication.keys.size > 0
|
55
43
|
@connection.request(method: :post, path: build_path("/services/#{name}/update", params), headers: headers, body: body.to_json)
|
56
44
|
end
|
57
45
|
|
58
46
|
# Inspect a service
|
59
47
|
#
|
60
48
|
# Docker API: GET /services/{id}
|
61
|
-
#
|
62
49
|
# @see https://docs.docker.com/engine/api/v1.40/#operation/ServiceInspect
|
63
50
|
#
|
64
51
|
# @param name [String]: The ID or name of the service.
|
65
|
-
#
|
66
52
|
# @param params [Hash]: Parameters that are appended to the URL.
|
67
53
|
def details name, params = {}
|
68
|
-
validate Docker::API::InvalidParameter, [:insertDefaults], params
|
69
54
|
@connection.get(build_path("/services/#{name}", params))
|
70
55
|
end
|
71
56
|
|
72
57
|
# Get stdout and stderr logs from a service.
|
73
58
|
#
|
74
|
-
# Note: This endpoint works only for services with the local, json-file or journald logging drivers.
|
75
|
-
#
|
76
59
|
# Docker API: GET /services/{id}/logs
|
77
|
-
#
|
78
60
|
# @see https://docs.docker.com/engine/api/v1.40/#operation/ServiceLogs
|
79
61
|
#
|
80
62
|
# @param name [String]: The ID or name of the service.
|
81
|
-
#
|
82
63
|
# @param params [Hash]: Parameters that are appended to the URL.
|
83
64
|
def logs name, params = {}
|
84
|
-
validate Docker::API::InvalidParameter, [:details, :follow, :stdout, :stderr, :since, :timestamps, :tail], params
|
85
65
|
@connection.get(build_path("/services/#{name}/logs", params))
|
86
66
|
end
|
87
67
|
|
88
68
|
# Delete a service
|
89
69
|
#
|
90
70
|
# Docker API: DELETE /services/{id}
|
91
|
-
#
|
92
71
|
# @see https://docs.docker.com/engine/api/v1.40/#operation/ServiceDelete
|
93
72
|
#
|
94
73
|
# @param name [String]: The ID or name of the service.
|